使用带有shared_ptr <T>的make_shared只对T <56字节有用吗?

mez*_*hic 2 c++ memory-management shared-ptr make-shared c++11

据我所知,如果你使用std::make_shared它,它会在底层对象的同时创建引用计数对象.

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

Fil*_*efp 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仍然可以完成它要解决的工作.

注意:可以说"保持参考计数器和物体在记忆中靠近在一起"只是一个可爱的小奖励.

  • @nwp肯定包含在"异常安全"`;-)`之下 (3认同)