由于引用计数器原子递增/递减,shared_ptrs是否遇到缓存未命中?

时间:2014-06-05 19:22:53

标签: c++ caching cpu shared-ptr atomic

(这可能是原子增量/减量的一般问题,但我遇到了shared_ptrs)领域的情况

当原子引用计数器递增和递减时,shared_ptr是否遇到两个缓存行未命中/访问?

我确实找到了这个:

atomic operation cost

但它似乎没有过于确定......

更新

如果我运行一个循环数百万次,增加一个原子变量,我得到的L1缓存未命中率为0.2。如果我使用非原子int做同样的事情,我得到0 L1缓存未命中率.....

测试意味着L1缓存行被驱逐。

1 个答案:

答案 0 :(得分:0)

shared_ptr必须在某处存储引用计数变量。它可能是从堆中分配的,而shared_ptr包含一个指向此变量的指针。

完全有可能必须访问此变量将导致缓存操作,除非已经小心将它们放在相同的块中,这是非常不可能的。

如果您担心这会影响性能,请创建一个带整数的类来计算引用,使用它的自定义指针类,并从引用计数类派生您想要管理的每个类。< / p>