【发布时间】:2015-10-15 11:54:21
【问题描述】:
我在工作或进行性能评估时遇到了一个问题:当我向代码中添加一些指令时,它的执行速度比初始代码快,我认为是由于编译器优化(未指定任何内容)。
编译器优化是如何工作的?特别是它们是在将 C 转换为汇编时还是在从汇编到二进制代码的步骤中执行的? 我想两者都有,但是有可能知道在每个步骤中执行了哪些优化?
我查看了程序集,但发现只有细微差别,因此我认为涉及到一些特定于架构的优化。
谢谢!
【问题讨论】:
-
Here is a talk 由遇到此类问题并解释它的编译器作者编写。答案是“编译器是复杂的野兽”。
-
有一个名为“OPTIM_DISABLE”的标志,您必须将其设置为 yes 才能禁用优化。如果您阻止任何变量优化,请使用 volatile
-
@SohilOmer 你在哪里看到那面旗帜?要显式禁用优化,请在调用
gcc时传递-O0,但它已经是默认设置。volatile会阻止一些优化,但远非如此。 -
感谢您的视频!我正在使用没有选项的 gcc(我想相当于 -O0)。 gcc 是否会执行一些优化?我在 gcc 手册中找到了一些默认优化,但与我的问题无关,但我仍在阅读。
标签: c gcc assembly compiler-optimization