据我了解,如果您使用std::make_shared
它,它会与基础对象同时创建引用计数对象。
但是,如果 smart_ptr 指向的对象指针大于 56 字节,那么引用计数器是否最终不会位于不同的缓存行中(因为缓存行是 64 字节)?
据我了解,如果您使用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 因为ref-counter和对象不能放在同一个cache-line中,我们仍然拥有前面列出的所有好处,并且std::make_shared
仍然可以完成它打算解决的工作。
注意:可以说“在内存中保持引用计数器和对象靠近在一起”只是一个甜蜜的小奖励。