常量折叠 #
这个例子的代码如下:
public static int test() {
int b = 3;
int c = 4;
return b + c;
}
在这块代码中,由于第 2 行对 b 赋值一个常量后,后面的语句没有再改过 b 的值,我们就可以把后面所有出现 b 的地方都改为 3,同理所有出现 c 的地方都改为 4。经过这种优化,代码的第 4 行就可以改写成:
return 3 + 4;
接着,编译器再做一轮分析,将运算符两边都是常量的情况,直接进行计算,也就是把上面的代码再优化成:
return 7;
这种优化被称为常量折叠。(这里也请你思考一下,如果这行代码是 C 语言的,在最优化的情况下,gcc 会生成什么样的机器码?)