【发布时间】:2015-07-14 23:06:24
【问题描述】:
C 编译器能否通过运行循环来优化循环?
例如:
int num[] = {1, 2, 3, 4, 5}, i;
for(i = 0; i < sizeof(num)/sizeof(num[0]); i++) {
if(num[i] > 6) {
printf("Error in data\n");
exit(1);
}
}
不是每次执行程序时都运行这个,编译器可以简单地运行它并优化它吗?
【问题讨论】:
-
嗯,你可以和 ex 核对一下。
gcc -S。这称为“循环展开”;编译器有效地复制+粘贴循环体,每次将i变量更改为常量。 AFAIK 它适用于小循环,并且可以允许发生其他优化(例如消除if分支会生成的死代码)。 -
尝试使用
-S -funroll-loops编译并检查输出。不过,“运行”循环并不是一个完全正确的术语——它不像实际执行的代码。 -
查找“基于配置文件的优化”或 PBO(又名“配置文件引导优化”或 PGO)。是的,优化器可以根据观察到的程序运行性能进行优化。另请参阅“链接时优化”(LTO)和“整个程序优化”。
标签: c loops for-loop optimization compiler-optimization