- 1、本文档共75页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
11章节 代码优化
第11章 代码优化;本章知识点:; 优 化;1、优化的概念:
优化的定义:对程序进行各种等价变换,使得变换后的代码运行结果与变换前代码运行结果相同,而运行速度加大,或占用存储空间减少,或两者都有。我们通常称这种变换为优化。
?; 优化的目的是为了产生更高效的代码。由优化编译程序提供的对代码的各种变换必须遵循下面的原则:
1)等价原则 主要指优化后的目标代码运行时间较短,以及占用的存储空间较小。
2)有效原则 使优化后所产生的目标代码运行时间确实较短,占用的空间确实较小
3)合算原则 应尽可能以较低的代价取得较好的优化效果;3、代码优化的基本方法
按照与机器相关的程度,代码优化分为:
与机器相关的优化:在生成目标程序时进行的,它在很大程度上与具体的计算机有关。
与机器无关的优化:在语法、语义分析生成中间代码之后,在中???代码上进行,这一类优化不依赖于具体的计算机,而取决于语言的结构。;根据优化所涉及的程序范围分成:
局部优化:基本块范围内的优化:合并已知量消除公共子表达式,削减计算强度和删除无用代码
循环优化:主要是基于循环的优化,包括循环不变式外提,归纳变量删除,计算强度削减。
全局优化:主要是在整个程序范围内进行的优化。?因为程序段是非线性的,因此需要分析程序的控制流和数据流,处理比较复杂。;4、优化技术;局限于基本块范围内的优化称为基本块内的优化
或局部优化 。
1、基本块的定义
所谓基本块是指程序中一顺序执行的语句序
列,其中只有一个入口和一个出口,入口就是其
中的第一个语句,出口就是其中的最后一个语
句。
;划分四元式程序为基本块的算法如下:
(1)求出四元式程序中各个基本块的入口语句,它们可以是下述语句之一:
①程序的第一个语句;;(2)对以上求出的每一入口语句构造其所属的基本块。它是由该入口语句到另一入口语句(不包括该入口语句),或到一转移语句(包括该转移语句),或到一停语句(包括该停语句)之间的语句序列组成的。;【例如】有下列三地址代码程序:
1)read X
2)read Y
3)R:=X mod Y
4)if R=0 goto (8)
5) X:=Y
6) Y:=R
7) goto (3)
8)write Y
9) halt;【例如】划分基本块
(1) read (C)
(2) A:= 0
(3) B:= 1
(4) L1: A:=A + B
(5) if B= C goto L2
(6) B:=B+1
(7) goto L1
(8) L2: write (A)
(9) halt
;3、基本块的变换
基本块内可进行的优化:
;删除公共子表达式
如果一个表达式E的值已计算过,并且在此之后E中变量的值没有改变,则称E为公共子表达式,为避免重复计算而删除,称为删除公共子表达式
【例如】x:=(a+b)*c-(a+b)^2
t1=a+b;
t2=t1*c;
t3=a+b;
t4=t3^2
X:=t2-t4;
;x+y*t-a*(x+y*t)/(y*t)
(1)( *, y, t, t1 )
(2)( +, x, t1, t2 )
(3)( *, y, t, t3 )
(4)( +, x, t3, t4 )
(5)( *, a, t4,t5 )
(6)( *, y, t, t6 )
(7)( /, t5, t1,t7 )
(8)( -, t2, t7, t8 );删除无用代码;合并已知量
a = 10 * 5 + 6 - b;
t0 = 10;
t1 = 5 ;
t2 = t0 * t1 ;
t3 = 6 ;
t4 = t2 +t3 ;
t5 = t4 – b;
a = t5 ; ;【例】
d = 2*3.14*r
(1) ( *,2,3.14,t1 )
(2) ( *,t1 , r,t2 )
(3) ( =,t2, , d )
2*3.14的值在编译时刻就可以确定。
(1) ( *,6.28,r,t2 )
(2) ( =,t2, , d );复写传播 ;t2 = t1 ;
t3 = t2 * t1;
t4 = t3 ;
t5 = t3 * t2 ;
c = t5 + t4 ;
;重新命名临时变量例如:? t:=b+c → u:=b+c;?????;返回;DAG图中结点的特点
1.叶结点????? 标记:标识符名(变量名)或常数,写在结点下面。??????代表:该结点代表该变量或常数的值。??????地址的表示:Addr(A)
文档评论(0)