据我了解,如果使用std::make_shared
,它会在底层对象的同时创建引用计数对象。
但是,如果smart_ptr指向的对象指针大于56字节,那么引用计数器最终不会位于不同的缓存行中(因为缓存行是64字节)?
答案 0 :(得分:6)
注意: 缓存行在每个平台上的大小不同,指针的大小也不一样..请注意根据问题中的数字做出假设。功能
为什么std::make_shared
?
std::make_shared
存在三个(主要)原因;
std::shared_ptr
; 缓存行和std::make_shared
老实说,这超出了std::make_shared
的范围和目的。 C ++标准不知道“缓存行”是什么,标准中描述的设计是在不针对任何特定平台的情况下编写的。
即使存在* cache-misse * s,因为 ref-counter 且该对象无法放入同一缓存行中,我们仍然有以前列出的所有好处,std::make_shared
仍然可以完成它要解决的工作。
注意:可以说“保持参考计数器和对象在内存中靠近”只是一个很小的奖励。