首页 > 后端开发 > C++ > 如何防止优化 C 代码中的语句重新排序?

如何防止优化 C 代码中的语句重新排序?

DDD
发布: 2024-12-01 14:26:14
原创
614 人浏览过

How Can I Prevent Statement Reordering in Optimized C   Code?

在 C 中执行语句顺序

问题:

如何防止重新排序C 代码中的语句,即使经过优化启用?

答案:

尽管有常见的假设,C 本身并不强制语句排序,尤其是在优化情况下。某些语句在优化代码中可能会出现乱序,这对于时间敏感操作等场景可能会出现问题。

解决方案:

从根本上来说,操纵操作像加法这样的基本操作的语义来实现严格排序是不可行的。编译器和硬件设计优化的前提是这些操作不具有可观察的时序属性。

但是,已经出现了用于微基准测试的有效技术:

不透明数据操作:

  • 将计算中的输入和输出数据标记为“不可优化”问题。
  • 这确保计算保持在计时范围内,同时允许在其边界内进行优化。

库支持:

  • 像 Google Benchmark 这样的库提供了 DoNotOptimize 函数来将数据标记为不可优化。
  • 用法示例:
template <class T>
__attribute__((always_inline)) inline void DoNotOptimize(const T &value) {
  asm volatile("" : "+m"(const_cast<T &&>(value)));
}
登录后复制

编译器指令:

  • 某些编译器提供诸如“__attribute__((优化(“无重新排序”)))“或“__restrict__”以防止重新排序。
  • 但是,这些指令可能并不总是足够或可移植。

注意:

C标准委员会正在探索 DoNotOptimize 等 API 的标准化,以进一步促进语句顺序的执行。

以上是如何防止优化 C 代码中的语句重新排序?的详细内容。更多信息请关注PHP中文网其他相关文章!

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