【发布时间】:2014-07-09 12:51:08
【问题描述】:
据我了解,如果您使用std::make_shared,它会在创建引用计数对象的同时创建底层对象。
但是,如果 smart_ptr 指向的对象指针大于 56 字节,那么引用计数器最终不会位于不同的缓存行中(因为缓存行是 64 字节)?
【问题讨论】:
-
make_shared的重点是内存分配很昂贵,所以我们应该做一次 -
因为提出了一个体面的问题而投了反对票.....太棒了!所以我们只能问我们已经知道答案的问题吗? ;)
-
差别不大,但确实存在。 Live Example.
-
即使数据可能不在同一个缓存行中,但指向数据的指针和 refcount 在一起分配时更有可能在同一页中,从而减少了访问 shared_ptr 时的 TLB 缓存。不过,这些影响非常小。
-
您不希望它们位于不同的缓存行上,以便增加/减少引用计数不会取消共享不变的对象吗?
标签: c++ c++11 memory-management shared-ptr make-shared