代码优化

代码优化

                
一、优化方法      
    1. 局部优化——DAG方法(重点)
    2. 循环优化——程序流程图
    3. 全局优化——数据流方程法
二、代码优化类型
   按与机器相关性分:   
         中间代码的优化:与机器无关的优化
         目标代码的优化:与机器相关的优化:寄存器的优化,特殊指令的优化,多处理机的优化等(窥孔技术)
   按优化的范围来分:
         部优化:指在只有一个入口和一个出口的程序块上进行的优化。
         循环优化:对循环中的代码进行的优化。
         全局优化:在整个程序范围内的优化。
三、常用的代码优化技术
      删除公共子表达式
      代码外提
      强度削弱
      变换循环条件(删除归纳变量)
      合并已知量
      复写传播
      删除无用赋值
例:设源程序:S=0;
                for(i=1;i<=20;i++)
           S = S+A[i] *B[i];
  若设addr(A),addr(B)分别表示数组A和B的初始地址,且按字节编址,则此源程序段的中间代码如下:(用变形四元式表示)
     1.删除公共子表达式
        公共子表达式:指计算结果相同的子表达式
         如:B2块中:(3)和(6)式:4*i相同:因此(6)式中4*i计算多余,用T4 =T1代替。
     2.循环的代码外提
        指将循环体中不变的运算。即将其结果独立于循环执行次数的表达式,提到循环外面。如:B2中的(4)和(7)式。
     3.强度削弱
        指在不改变运算结果的前提条件下,将执行时间长的运算转换成执行时间短的运算。如加运算比乘运算执行时间短。
        如:B2中的(3)式:T1=4*i:i每循环一次增1,则T1每循环一次总是加4。这样可将T1=4*i提到循环外,则用(3’)T1= T1+4放在循环体内代替原T1=4*i。此时(5)式成为循环体内第一条表达式。
    4.变换循环控制条件
      指若在循环体中存在一个变量T,与循环控制变量i保持线性关系,同时在循环后又不引用i,而除去i又不影响结果则可由T代替i控制循环次数的作用,从循环中删除i, 这种方法称为变换循环控制条件。
       如:i与T1保持T1=4*i的线性关系,又循环外不引用i,所以循环控制条件变为:i≤20=>T1≤80且将i=i+1去掉。
    5.合并已知量
     指在编译时能直接计算其结果的量(常数或赋了值的变量),而不必等到运行时的计算。
      如:B1中:(2)i=1(3)T1 = 4*i,i的已知值,则可用T1=4代替T1=4*i
    6.复写传播
    7.删除无用赋值 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值