将make_shared与shared_ptr <t>一起使用仅对T&lt; 56个字节?</t>

时间:2014-05-21 03:57:08

标签: c++ c++11 memory-management shared-ptr make-shared

据我了解,如果使用std::make_shared,它会在底层对象的同时创建引用计数对象。

但是,如果smart_ptr指向的对象指针大于56字节,那么引用计数器最终不会位于不同的缓存行中(因为缓存行是64字节)?

1 个答案:

答案 0 :(得分:6)

注意: 缓存行在每个平台上的大小不同,指针的大小也不一样..请注意根据问题中的数字做出假设。功能


为什么std::make_shared

std::make_shared存在三个(主要)原因;

  • 意味着为 ref-counter 和一次跟踪的对象分配内存(通常内存分配很昂贵);
  • 构建和初始化std::shared_ptr;
  • 的异常安全方法
  • 和代码简洁。

缓存行和std::make_shared

怎么样?

老实说,这超出了std::make_shared的范围和目的。 C ++标准不知道“缓存行”是什么,标准中描述的设计是在不针对任何特定平台的情况下编写的。

即使存在* cache-misse * s,因为 ref-counter 且该对象无法放入同一缓存行中,我们仍然有以前列出的所有好处,std::make_shared仍然可以完成它要解决的工作。

注意:可以说“保持参考计数器和对象在内存中靠近”只是一个很小的奖励。