n - dag优化_编译原理学习笔记(七):优化代码

优化代码

一、优化概述

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);
}

06f784e7bdfdff6b0b0cc755d8d990a6.png
删除公共子表达式
T1 = 4*i
T2 = 4*i

T1 = 4*i
T2 = T1

f1c39f132275e30d34b29995c611ec48.png
复写传播
T4 = T2
T3 = T4 + 1

T4 = T2
T3 = T2 + 1

5d47ddb98c5c9ec8ee595a7ab621dd8c.png
删除无用赋值
T4 = T2 // T4 无用
T3 = T2 + 1

T3 = T2 + 1

8edac7274028fef254453f6a6114cb1f.png
  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值