5.6. 代码优化¶
5.6.1. 简介¶
代码优化对程序实施各种等价变化,使得变换后程序能生成高效率的目标代码。好的编译器需要生成目标代码占用的存储空间少,且运行时间短。另外,编译器的编译时间、资源消耗也是需要考虑的指标。
5.6.2. 优化方式¶
代码优化可以分为与机器有关的优化和与机器无关的优化。
机器无关的优化主要有下面几种方式:
- 局部优化
合并已知量
删除公共子表达式 (删除多余的运算)
删除无用赋值
- 循环优化
代码外提
删除归纳变量
强度削弱
- 全局优化
在整个程序范围内进行优化,需要进行数据流分析,代价很高
5.6.3. 优化原则¶
在当前,优化越来越重要,一个是因为现代处理器越来越复杂,有更多的机制来提供优化的机会。
另一个原因是多核并行越来越普遍,编译器需要适应,但是在硬件条件多变的情况下,很难知道一个解是不是最优解,那么就遵循以下的原则:
优化必须保证正确
优化要保证大部分程序都能提升表现
优化带来的编译时间消耗需要是可以接受的
工程量要能接受