代码优化
通过程序变换(局部变换和全局变换)来改进程序,称为优化
基本块和流图
- 对每个基本块从最后一个语句反向扫描到第一个语句,可以得到下次引用信息,这样就可以制造出引用链,从而通过是否后面还有引用做出相应的编译优化:
数据流分析介绍:
B1的入口,是开始都为0,出口生成d1,d2,d3,被注销的是d4,d5,d6,d7所以是111 0000
对于B2来说,是生成d4,d5,注销d1,d2,d7,所以取并集是001 1100
对于B3来说是 生成d6,删除d3,取并集是000 1110
如下:
对于这种递归中直接返回递归调用的叫做尾递归,关于尾递归,编译器的处理方式是:
这样的话,尾递归可以重用上一次递归的活动记录,而上一次活动记录本来也是无用的了,这样减少了销毁和创建活动记录的时间,编译器通过这种方式做了优化。