- 1、本文档共59页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第八章 代码优化 本章学习目标 源程序经过词法分析、语法分析、语义分析等阶段的编译后,就得到和与源程序等价的中间代码。但是,此时的中间代码是“机械”生成的,有很多冗余代码,降低了效率,因此,需要进行代码的优化。代码优化的目的是为了提高目标程序的质量。 优化可以分为局部优化、循环优化和全局优化。本章要点: 局部优化 循环优化 全局优化 8.1优化的概念 8.1.1 优化概述 所谓优化,一般是指为提高目标程序的质量而进行的各项工作。即对程序或中间代码进行各种等价的变换,使得从变换后的程序出发,能生成更有效的目标代码。这里所说的质量,通常就是指目标程序所占的存储空间的大小和运行目标程序所需要的时间的多少。优化的目的在于,既要设法缩小存储空间,又要尽量提高运行速度,而且常常偏重于提高运行速度。 代码涉及面很广,从优化与机器的关系出发,可将优化分为与机器无关的优化和与机器相关的优化。与机器无关的优化可以在源程序或中间语言程序一级上进行。这类优化主要包括①常数合并②公共表达式的消除③循环中不变式的外提④运算强度的削弱等。 此外,从优化与源程序的关系而言,可以把优化分为局部优化和全局优化。局部优化通常指只有一个入口(即程序段的第一条代码)和一个出口(即程序段的最后一条代码)的基本块上的优化。因为只有一个出口和一个入口,所以是线性的,处理起来比较简单,但是效果较差。全局优化是指在非线性程序块上的优化,由于程序块是非线性的,因此需要分析比基本块更大的程序块乃至整个源程序的控制流程,需要考虑较多的因素。这样的优化比较复杂,开销大,但是效果较好。 与机器相关的优化是在目标机上进行的,这类优化主要包括①寄存器的优化②并行分支优化③窥孔优化等。与机器相关的优化依赖于机器。 8.1.2 优化技术的简介 为了说明问题,我们来看下面的例子,源程序如下: p:=0 for I:=1 to 20 do p:=p+A[I]*B[I] 1.删除多余的运算(删除公共子表达式) 优化的目的是在于使目标代码的执行速度较快。图中(3)和(6)是一个重复的运算,有一个是多余的。将(6)变为T4=T1;这种优化的方式为删除公共子表达式。 2.代码外提 代码外提为了减少循环中代码的总数。这种方法就是把循环中不变的运算提到循环的外面,使之只在循环外计算一次。经过删除和循环外提后得到的中间代码变如图8-3所示。 3.强度削弱 强度削弱就是把强度大的运算换算成强度小的运算,例如把乘法运算换算成加法运算等。例如:(3)T1:=4*I和(11)I=I+1变为T1:=T1+4 中间代码就变为图8-4。 4.变换循环控制条件 将上面的循环控制条件变为: (12)if I≤20 goto(3)改为T1≤80,这样整个程序的运行结果不变。这种变换称为变换循环控制条件,经过这一变换后,循环中I的值在循环后不会被引用,四元式(11)可以从循环中删除,如图8-5所示。 5.合并已知量与复写传播 (2)和(3)合并在一起,使得T1=4。这种变换称为合并已知量。同时把T1的值传递给T4,而(6)和(8)之间并没有改变T4和T1的值。这种方法叫复写传播。四元式序列变为图8-6所示。 6.删除无用的赋值语句。 在图8-5中,(6)对T4赋值,但T4未被引用;另外,(2)和(11)对I赋值,但只有(11)引用I。所以,只要程序中其它地方不需要引用T4和I,则(6),(2)和(11)对程序的运行结果无任何作用。我们称之为无用赋值,无用赋值可以从程序中删除,于是中间代码就变成图8-6所示。从上面的各个图我们能看出,经过优化后的代码条数明显减少,执行效率提高了很多。 8.2局部优化 局部优化是对代码的每一个线性部分进行优化,使得在这个线性部分只存在一个入口和一个出口,而这个线性部分称之为基本块。 8.2 .1基本块的划分方法 所谓基本块,就是指程序中一顺序执行的语句序列,其中只有一个入口和一个出口,入口就是指该序列的第一条语句,出口就是该序列的最后一条语句。对于一个基本块来说,执行时只能从其入口进入,从其出口退出。对一个给定的程序,可以把它划分为一系列基本块,在各个基本块范围内进行的优化称为局部的优化。划分基本块的关键问题是准确定义入口和出口语句。下面给出划分四元式程序的基本块的算法: (1)从四元式的序列中确定满足以下条件的入口语句 1)四元式序列的第一条语句。 2)由条件转移语句或无条件转移语句转移到的语句。 3)紧跟在条件转移语句后面的语句。 (2)确定满足以下条件的出口语句 1)下一个入口语句的前导语句。 2)转移语句(包括转移语句自身)。 3)停语句(包括停语句自身。) 例如:考察下面求最大公因子的三地址代码程序。 (1)read x (2)read y (3)R=X%Y (4)IF R=0
您可能关注的文档
- 编单片机原理与应用 三版 教学课件 作者 潘永雄 第1 3章 第1章.ppt
- 编单片机原理与应用 三版 教学课件 作者 潘永雄 第1 3章 第2章.ppt
- 编单片机原理与应用 三版 教学课件 作者 潘永雄 第1 3章 第3章.ppt
- 编单片机原理与应用 三版 教学课件 作者 潘永雄 第1 3章 封面及目录.ppt
- 编单片机原理与应用 三版 教学课件 作者 潘永雄 第4 7章 第7章.ppt
- 编码理论 第二版 教学课件 作者 田丽华 第1 5章 第1章.ppt
- 编码理论 第二版 教学课件 作者 田丽华 第1 5章 第2章.ppt
- 编码理论 第二版 教学课件 作者 田丽华 第1 5章 第3章.ppt
- 编码理论 第二版 教学课件 作者 田丽华 第1 5章 第4章.ppt
- 编码理论 第二版 教学课件 作者 田丽华 第1 5章 第5章.ppt
- 编译原理实用教程杨德芳电子教案 第9章运行时存储空间的组织.ppt
- 编译原理实用教程杨德芳电子教案 第10章 符号表和错误处理.ppt
- 编译原理实用教程杨德芳电子教案 第11章 目标代码的生成.ppt
- 变频技术原理与应用 第2版 教学课件 作者 吕汀 第1 2章.ppt
- 变频器及其控制技术 教学课件 作者 肖朋生 电子教案 第1章通用变频器的基本工作原理.ppt
- 变频器及其控制技术 教学课件 作者 肖朋生 电子教案 第2章通用变频器的参数设置及功能选择.ppt
- 变频器及其控制技术 教学课件 作者 肖朋生 电子教案 第3章变频器调速控制电路的设计.ppt
- 变频器及其控制技术 教学课件 作者 肖朋生 电子教案 第4章变频器安装及外围设施的选用.ppt
- 变频器及其控制技术 教学课件 作者 肖朋生 电子教案 第5章变频器的应用举例.ppt
- 变频器及其控制技术 教学课件 作者 肖朋生 电子教案 第6章成套变频调速电气控制柜的设计.ppt
文档评论(0)