让 test_speed.c 成为以下 C 代码:
#include <stdio.h>
int main(){
int i;
for(i=0; i < 1000000000; i++) {}
printf("%d", i);
}
我在终端运行:
gcc -o test_speed test_speed.c
然后 :
time ./test_speed
我得到:
现在我运行以下命令:
gcc -O3 -o test_speed test_speed.c
然后 :
time ./test_speed
我得到:
第二次怎么跑得这么快?它是否已经在编译期间计算过?
最佳答案
gcc
“知道”循环中没有主体,并且不依赖任何结果,无论是临时的还是真实的——因此它删除了循环。
godbolt.org 是一个很好的分析工具,它显示生成的程序集。根本不优化和 -O3
优化之间的区别是明显的:
无优化
带 -O3
关于c - gcc -O3 怎么能跑得这么快?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49633618/