Как я понимаю, если вы используете std::make_shared
он создает объект подсчета ссылок одновременно с базовым объектом.
Однако, если указатель объекта на smart_ptr больше 56 байт, разве счетчик ссылок в конечном итоге не окажется в другой строке кэша (поскольку строки кэша составляют 64 байта)?
Замечания: кэш-линии Не одинаковый размер на каждой платформе, и размер указателя не всегда одинаков. Будьте осторожны, делая предположения на основе чисел в вопросе.
Зачем std::make_shared
?
std::make_shared
существует по трем (основным) причинам;
std::shared_ptr
;Как насчет строки кэша и std::make_shared
?
Честно говоря, это выходит за рамки и цели std::make_shared
, Стандарт C ++ не имеет представления о том, что «кэш-линии«, и дизайн, описанный в стандарте, написан так, что он не нацелен на какую-либо конкретную платформу.
Даже если будет * cache-misse * s, потому что исх счетчик и объект не может поместиться внутри того же кэш-линии, у нас все еще есть все преимущества, перечисленные выше, и std::make_shared
по-прежнему выполняет работу, которую должен решить.
Замечания: Можно сказать, что «Хранение реф-счетчика и объекта близко друг к другу в памяти» это просто сладкий маленький бонус.