优化器分阶段/通过...当您指定 -O2 时,启用了许多优化。这里发挥作用的主要优化是
- 循环展开
- 持续传播
- 不断折叠
- 死码消除
http://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html
所以这段代码
int i, j = 0;
for (i = 0; i < 10; i++) {
j += i;
}
return j;
循环展开后变为
int i, j = 0;
i=0; j += i;
i=1; j += i;
i=2; j += i;
i=3; j += i;
i=4; j += i;
i=5; j += i;
i=6; j += i;
i=7; j += i;
i=8; j += i;
i=9; j += i;
return j;
经过不断的传播通过
int i, j = 0;
i=0; j += 0;
i=1; j += 1;
i=2; j += 2;
i=3; j += 3;
i=4; j += 4;
i=5; j += 5;
i=6; j += 6;
i=7; j += 7;
i=8; j += 8;
i=9; j += 9;
return j;
消除死码后
j = 0;
j += 0;
j += 1;
j += 2;
j += 3;
j += 4;
j += 5;
j += 6;
j += 7;
j += 8;
j += 9;
return j;
不断折叠后
j = 45;
return j;
最后,
return 45;