通过shared_ptr访问是否比原始指针更多地污染缓存行?

use*_*112 7 c++ optimization performance shared-ptr

我理解一个好的编译器可以执行优化,以便访问,例如,int*通过std::shared_ptr使用相同的程序集完成,就像使用原始int*指针一样.

我的问题是:包含优化的智能指针的缓存行是否会被智能指针中的其他数据成员污染,如引用计数器?因此,虽然生成的程序集与实际指针相同,但缓存性能可能更差,因为没有那么多的缓存行被有效使用?

编辑:如果我们迭代像这样的结构std::vector<std::shared_ptr<int>>并使用整数,这种性能影响会更加明显.

Cha*_*had 0

如果您正在复制智能指针(以便需要修改引用计数),它肯定会被放入缓存中进行更新。std::make_shared如果您使用as 确保引用计数和目标对象在单个分配中分配,则可以缓解与此相关的问题。