在 C 中执行语句顺序
问题:
如何防止重新排序C 代码中的语句,即使经过优化启用?
答案:
尽管有常见的假设,C 本身并不强制语句排序,尤其是在优化情况下。某些语句在优化代码中可能会出现乱序,这对于时间敏感操作等场景可能会出现问题。
解决方案:
从根本上来说,操纵操作像加法这样的基本操作的语义来实现严格排序是不可行的。编译器和硬件设计优化的前提是这些操作不具有可观察的时序属性。
但是,已经出现了用于微基准测试的有效技术:
不透明数据操作:
库支持:
template <class T> __attribute__((always_inline)) inline void DoNotOptimize(const T &value) { asm volatile("" : "+m"(const_cast<T &&>(value))); }
编译器指令:
注意:
C标准委员会正在探索 DoNotOptimize 等 API 的标准化,以进一步促进语句顺序的执行。
以上是如何防止优化 C 代码中的语句重新排序?的详细内容。更多信息请关注PHP中文网其他相关文章!