第11章-代码优化ppt课件.ppt

第11章-代码优化ppt课件.ppt

ID:60802964

大小:439.00 KB

页数:74页

时间:2020-12-19

第11章-代码优化ppt课件.ppt_第1页
第11章-代码优化ppt课件.ppt_第2页
第11章-代码优化ppt课件.ppt_第3页
第11章-代码优化ppt课件.ppt_第4页
第11章-代码优化ppt课件.ppt_第5页
资源描述:

《第11章-代码优化ppt课件.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、第11章代码优化11.1代码优化技术11.2局部优化11.3控制流程分析和循环【学习目标】通过本章学习:◇理解所谓代码优化是指什么?◇知道最常用的代码优化技术有哪些?◇知道实现代码优化要进行哪些工作?【学习指南】所谓代码优化是指对程序代码进行等价变换。程序代码可以是中间代码(如四元式代码),也可以是目标代码。优化的含义是最终生成的目标代码短(而运行速度快),时空效率优化。最常用的代码优化技术有删除多余运算,循环不变代码外提,强度削弱,变换循环控制条件,合并已知量与复写传播,以及删除无用赋值等等。【难重点

2、】从概念上理解什么是代码优化,编译过程中可进行哪些优化,以及进行优化所需要的基础都没有难点,但在实现上是有相当复杂的工作。11.0概述源语言程序经过词法分析、语法分析、语义分析和中间代码生成等编译前期工作(编译前端),得到了与源程序等价的中间代码程序。中间代码程序的质量将直接影响目标程序执行的效率。程序执行的效率体现在两个方面:目标程序运行时刻所占用的存储空间和目标程序运行时刻所耗费的时间。所谓优化,是为了提高程序的执行效率而对程序代码进行的等价变换。使得变换后的代码运行结果与变换前代码运行结果相同,而

3、运行速度加大或占用存储空间少,或两者都有。编译过程中可进行的优化可按阶段划分:优化可在编译的不同阶段进行,分为中间代码一级和目标代码一级的优化。可按优化涉及的程序范围划分:对同一阶段,分为局部优化,循环优化和全局优化。可按优化是否涉及具体计算机来划分:分为与计算机有关的优化和与计算机无关的优化。优化可在编译的不同阶段进行,对同一阶段,涉及的程序范围也有所不同,在同一范围内,可进行多种优化。目前编译程序的优化工作一般是在中间代码生成之后和(或)目标代码生成之后进行。如图11.1所示。编译前端代码生成中间代

4、码优化目标代码目标代码优化中间代码源程序目标程序中间代码的优化是对中间代码进行等价变换。目标代码的优化是在目标代码生成之后进行的,因为生成的目标代码对应于具体的计算机,因此,这一类优化在很大程度上依赖于具体的机器,我们不做详细讨论。另外依据优化所涉及的程序范围,又可分为局部优化、循环优化和全局优化三个不同的级别。局部优化指的是在只有一个入口、一个出口的基本程序块上进行的优化。循环优化是对循环中的代码进行的优化。全局优化是在整个程序范围内进行的优化。编译程序的优化工作旨在生成较好性能的目标代码,为此,编译

5、程序需要对代码(中间代码或目标代码)进行各种方式的变换。变换的宗旨是:等价-经优化工作变换后的代码运行结果应与原来程序运行结果一样。有效-经优化工作变换后的代码应运行时间较短,占用的存储空间较小。合算-获得较好性能的目标代码是优化工作的意图,而优化本身包括大量的代码分析和变换工作,这里有个权衡:应尽可能以较低的代价取得较好的优化效果。11.1代码优化技术常用的优化技术有:删除多余运算;循环不变代码外提;强度削弱;变换循环控制条件;合并已知量与复写传播;删除无用赋值。为了说明这些常用的优化技术,我们来看下

6、面这个例子。例11.1源程序是:P∶=0for(I=1;I<=20;I=++)P∶=P+A[I]*B[I];经过编译得到的中间代码如图11.2所示,这个程序段由B1和B2两个部分组成,B2是一个循环,假定每个元素按4字节编址。那么,对于这个中间代码段,如何进行上述优化。图11.2中间代码段(1)P:=0(2)I:=1(3)T1:=4*I(4)T2:=addr(A)-4(5)T3:=T2[T1](6)T4:=4*I(7)T5:=addr(B)-4(8)T6:=T5[T4](9)T7:=T3*T6(10)P

7、:=P+T7(11)I:=I+1(12)ifI≤20goto(3)B1B2数组元素地址计算的常量部分T2数组元素地址计算的增量部分T1P∶=0for(I=1;I<=20;I=++)P∶=P+A[I]*B[I];1)删除多余运算(删除公共子表达式)优化的目的在于使生成的目标代码较少而执行速度较快。四元式(6)变换成:T4∶=T1。这种优化称为删除多余运算或称为删除公共子表达式。图11.2中间代码段(1)P:=0(2)I:=1(3)T1:=4*I(4)T2:=addr(A)-4(5)T3:=T2[T1](6

8、)T4:=4*I(7)T5:=addr(B)-4(8)T6:=T5[T4](9)T7:=T3*T6(10)P:=P+T7(11)I:=I+1(12)ifI≤20goto(3)B1B22)代码外提减少循环中代码总数的一个重要办法是循环不变代码外提。这种变换把循环不变运算,即其结果独立于循环执行次数的表达式,提到循环的前面,使之只在循环外计算一次。上例中,我们可以把四元式(4)和四元式(7)提到循环外。经过删除多余运算和代码外提后,代码变换成图

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。