优化代码
一、优化概述
1.1 基本概念
「优化」
- 对程序进行各种等价变换,使得从变换后的程序出发,能生成更有效的目标代码。
- 等价:不改变程序的运行结果
- 有效:目标代码运行时间短,占用存储空间小
「遵循的原则」
- 等价原则:优化不应改变程序运行的结果
- 有效原则:使优化后所产生的目标代码运行时间较短,占用的存储空间较小
- 合算原则:应尽可能以较低的代码取得较好的优化效果
「优化的级别」
- 局部优化、循环优化、全局优化
1.2 优化的种类
「总体列举」
- 删除多余运算(删除公用子表达式)
- 合并已知量
- 复写传播
- 删除无用赋值
- 代码外提
- 强度消弱
- 变换循环控制条件
原代码
void quicksort(m, n);
int m, n;
{
int i, j, v, x;
if(n <= m) return;
i = m-1, j = n, v = a[n];
while(1) {
do i = i+1; while(a[i] < v);
do j = j-1; while(a[j] > v);
if(i >= j) break;
x = a[i], a[i] = a[j], a[j] = x;
}
x = a[i], a[i] = a[n], a[n] = x;
quicksort(m, j); quicksort(i+1, n);
}
删除公共子表达式
T1 = 4*i
T2 = 4*i
T1 = 4*i
T2 = T1
复写传播
T4 = T2
T3 = T4 + 1
T4 = T2
T3 = T2 + 1
删除无用赋值
T4 = T2 // T4 无用
T3 = T2 + 1
T3 = T2 + 1