【发布时间】:2015-12-25 14:31:35
【问题描述】:
我有以下代码:
int main()
{
int i=0;
for(i=0;i<10000000;i++)
//do something
return 0;
}
当我使用 'gcc -o file file.c' 命令运行此代码时,它会在 244 毫秒内执行,而当我使用 'gcc -O3 file.c -o file' 执行相同的代码时,它会得到在 0 毫秒内执行(非常短的时间,显示为零)。我无法理解 -O3 标志做了什么优化,以使我们在执行中获得很大的速度。
关于“-O3”优化的任何链接、文档或解释(除了 gcc.gnu.org,我已经看到并发现那里的信息不足以为我提供一个体面的解释和对正在发生的事情的洞察力) 非常感谢。
【问题讨论】:
-
也许它意识到没有使用循环的副作用并替换为 nop
-
如果您想了解底层发生了什么,请向我们提供由 gcc 生成的汇编代码。现在我们只能猜测。我也认为,
//do something在这种情况下是有意义的。 -
很大程度上取决于做什么事情做什么!
-
要真正知道发生了什么,您可能应该熟悉编译器和代码生成理论与实践。
-
查看程序集输出 (
gcc -S -O3 file.c)。
标签: c gcc compiler-construction