前言
看了《C++反汇编与逆向》那本书,对于加了优化的表达式虽然能够理解,但是由于不常见到又可能见到,见到的时候又经常想不起来,就干脆记下来,也算是督促自己对这一块理解透彻吧。
加法优化
优化是在代码编译的时候加入优化选项,可以减少占用空间或者减少运行时间消耗等方面进行优化,达到最佳效率。这里我们的优化单指运行时间的优化。
1 常量传播
说明:即在编译期间就可以得到结果的加法,可直接将变量替换为常量。
举例:
int main()
{
int x = 4;
printf("x = %d\n", x);//这里的x在编译期间就可以确定值,就可以直接替换为常量
return 0;
}
2 常量折叠
说明:其基本思路和常量传播类似,也是在编译期间可以得到运行结果的运算可以直接用运算结果代替计算过程。
举例:
int main()
{
int x = 4 * 5 + 3;
printf("x = %d\n", x);//这里的x可以直接得到结果,所以x的表达式可以直接替换为x = 23,再常量/播,直接将此处的x替换为23
return 0;
}
减法优化
说明:这里要提到一个额外的点,即加减法之间的转换,即x - y == x + y的补码。由于计算机只会做加法,所以减法实质也是一种加法,只是对补码的加法。所以其优化和加法一致。