问题:
为什么编译器不合并将相同值的连续写入合并到单个原子中变量?
答案:
虽然 C 11 / C 14 标准允许将多个存储折叠为单个存储,但编译器不会实现此优化,因为:
1。进度条问题:
下沉和折叠循环存储可能会导致进度条显示为零,直到最后跳到 100%,而不是逐步显示进度。
2.最小惊喜原则:
程序员期望每个原子存储语句都有单独的内存操作,而不是被优化掉。这可以避免意外行为。
3.有限的用例:
编译器已确定这种优化有益的场景(例如减少不必要的 Shared_ptr 引用计数操作)很少见。
1。假设规则:
假设规则允许编译器确定内存操作的顺序,即使源代码另有指示。这允许进行可能改变程序行为的内部优化。
1. API 扩展:
C 工作组内正在进行讨论,以扩展 std::atomic API 以提供对优化行为的控制,从而允许编译器在适当的时候进行优化。
2.易失性原子变量:
使用 易失性原子
以上是为什么编译器不优化连续冗余的'std::atomic”写入?的详细内容。更多信息请关注PHP中文网其他相关文章!