【发布时间】:2021-12-31 08:34:20
【问题描述】:
Why would I std::move an std::shared_ptr?
对这个问题的回答指出,移动std::shared_ptr 与速度有关,但没有人详细解释为什么它更快。相比之下,它到底有多贵?当一个人经常使用它时是否值得优化?
【问题讨论】:
-
当分析显示它在您的应用程序中存在瓶颈时,值得优化,否则不是。
-
接受的答案确实解释了为什么它更快?
-
由于接受的答案(和 cmets)详细介绍了同步共享指针计数器的成本,您能否更改您的问题,使其不重复?
-
@UnholySheep 是不是快了两倍几十几百?如果它的速度正好是这个答案中的 100 倍,那么有一些支持数据会很好。
-
shared_ptr有两个间接级别。一个指向带有原子计数器的数据结构。下一个从那里指向实际对象。移动共享指针涉及第一个指针的简单副本,无需做任何其他事情。引用计数器保持不变,因为引用它的shared_ptrs 的数量没有改变。复制要困难得多:除了复制指针外,还必须(也)以线程安全的方式原子地递增引用计数器。一条原子指令可能需要相当于数千条“非原子”指令的时间。
标签: c++