以老师PPT为标准,借鉴部分教材内容,AlvinZH学习笔记。数组
.1. 目的:提升目标代码运行效率。时间效率(减小运行时间);空间效率(减小内存容量)。less
原则:进行优化必须严格遵循“不能改变原有程序语义”原则。函数
2. 优化的分类学习
从优化的层次,与机器是否有关,分为:独立于机器的优化、与机器有关的优化。优化
从优化涉及的范围,又分为:局部优化、循环优化、全局优化。code
3. 知足如下三个条件的程序段,称为基本块:内存
基本块划分问题编译
(1)肯定入口语句效率
(2)每一个入口语句直到下一个入口语句或程序结束,之间的语句属于同一个基本快。编译原理
1. 利用代数性质(代数变换)
2. 复写(copy)传播:如 x:=y 这样的赋值语句,两者值相同,有些状况能够用y代替x编译。其实就是将多语句简化,减小值的传播过程。
3. 删除公共达式:具备相同值的子表达式在两个以上地方出现时,称它为公共子表达式。能够将之删除至一次,将屡次计算变为一次。
4. 删除冗余代码:冗余代码就是毫无实际意义的代码,又称死代码 (deadcode)或无用代码(useless code)。永远不会执行的代码。
5. 循环优化
6. in_line展开:把过程(或函数)调用改成in_line展开可节省许多处理过程(函数)调用所花费的开销。省去了函数调用时参数压栈,保存返回地址等指令。这也仅仅限于简单的函数。
7. 其余方法,如控制流方法。
引用说明
- 邵老师课堂PDF - 《编译原理级编译程序构造》