首页 > 后端开发 > C++ > 为什么编译器不优化连续冗余的'std::atomic”写入?

为什么编译器不优化连续冗余的'std::atomic”写入?

Mary-Kate Olsen
发布: 2024-12-15 06:34:14
原创
598 人浏览过

Why Don't Compilers Optimize Consecutive Redundant `std::atomic` Writes?

为什么编译器不合并连续的冗余 std::atomic 写入

问题:

为什么编译器不合并将相同值的连续写入合并到单个原子中变量?

答案:

虽然 C 11 / C 14 标准允许将多个存储折叠为单个存储,但编译器不会实现此优化,因为:

实施质量担忧

1。进度条问题:

下沉和折叠循环存储可能会导致进度条显示为零,直到最后跳到 100%,而不是逐步显示进度。

2.最小惊喜原则:

程序员期望每个原子存储语句都有单独的内存操作,而不是被优化掉。这可以避免意外行为。

3.有限的用例:

编译器已确定这种优化有益的场景(例如减少不必要的 Shared_ptr 引用计数操作)很少见。

标准施加的限制

1。假设规则:

假设规则允许编译器确定内存操作的顺序,即使源代码另有指示。这允许进行可能改变程序行为的内部优化。

未来发展

1. API 扩展:

C 工作组内正在进行讨论,以扩展 std::atomic API 以提供对优化行为的控制,从而允许编译器在适当的时候进行优化。

2.易失性原子变量:

使用 易失性原子;确保变量的存储不能被优化掉,因为不允许从代码中删除对易失性对象的访问。然而,正如所提供的答案中所讨论的,这种方法有其自身的局限性。

以上是为什么编译器不优化连续冗余的'std::atomic”写入?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板