编译原理课后答案第五章代码优化.ppt
《编译原理课后答案第五章代码优化.ppt》由会员分享,可在线阅读,更多相关《编译原理课后答案第五章代码优化.ppt(39页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第五章第五章 代码优化代码优化 第五章第五章 代码优化代码优化 5.1 完成以下选择题:(1)优化可生成 的目标代码。a.运行时间较短 b.占用存储空间较小c.运行时间短但占用内存空间大 d.运行时间短且占用存储空间小第五章第五章 代码优化代码优化 (2)下列 优化方法不是针对循环优化进行的。a.强度削弱 b.删除归纳变量 c.删除多余运算 d.代码外提 (3)基本块内的优化为 。a.代码外提,删除归纳变量 b.删除多余运算,删除无用赋值c.强度削弱,代码外提 d.循环展开,循环合并第五章第五章 代码优化代码优化 (4)在程序流图中,我们称具有下述性质 的结点序列为一个循环。a.它们是非连通的
2、且只有一个入口结点 b.它们是强连通的但有多个入口结点c.它们是非连通的但有多个入口结点 d.它们是强连通的且只有一个入口结点(5)关于必经结点的二元关系,下列叙述中不正确的是 。a.满足自反性 b.满足传递性 c.满足反对称性 d.满足对称性【解答】(1)d (2)c (3)b (4)d (5)d第五章第五章 代码优化代码优化 5.2 何谓局部优化、循环优化和全局优化?优化工作在编译的哪个阶段进行?【解答】优化根据涉及的程序范围可分为三种。(1)局部优化是指局限于基本块范围内的一种优化。一个基本块是指程序中一组顺序执行的语句序列(或四元式序列),其中只有一个入口(第一个语句)和一个出口(最后
3、一个语句)。对于一个给定的程序,我们可以把它划分为一系列的基本块,然后在各个基本块范围内分别进行优化。通常应用DAG方法进行局部优化。第五章第五章 代码优化代码优化 (2)循环优化是指对循环中的代码进行优化。例如,如果在循环语句中某些运算结果不随循环的重复执行而改变,那么该运算可以提到循环外,其运算结果仍保持不变,但程序运行的效率却提高了。循环优化包括代码外提、强度削弱、删除归纳变量、循环合并和循环展开。第五章第五章 代码优化代码优化 5.3将下面程序划分为基本块并作出其程序流图。read(A,B)F=1C=A*AD=B*BifC100gotoL2haltL2:F=F-1gotoL1第五章第五
4、章 代码优化代码优化 【解答】先求出四元式程序中各基本块的入口语句,即程序的第一个语句,或者能由条件语句或无条件转移语句转移到的语句,或者条件转移语句的后继语句。然后对求出的每一入口语句构造其所属的基本块,它是由该入口语句至下一入口语句(不包括该入口语句)或转移语句(包括该转移语句)或停语句(包括该停语句)之间的语句序列组成的。凡未被纳入某一基本块的语句都从程序中删除。要注意基本块的核心只有一个入口和一个出口,入口就是其中第一个语句,出口就是其中最后一个语句。如果发现某基本块有两个以上的入口或两个以上的出口,则划分基本块有误。第五章第五章 代码优化代码优化 程序流图画法是当下述条件(1)和(2
5、)有一个成立时,从结点i有一有向边引到结点j:(1)基本块j在程序中的位置紧跟在基本块i之后,并且基本块i的出口语句不是无条件转移语句goto(s)或停语句。(2)基本块i的出口语句是goto(s)或ifgoto(s),并且(s)是基本块j的入口语句。应用上述方法求出本题所给程序的基本块及程序流图见图5-1,图中的有向边、实线是按流图画法(1)画出的,虚线是按流图画法(2)画出的。第五章第五章 代码优化代码优化 图5-1程序流图第五章第五章 代码优化代码优化 5.4 基本块的DAG如图5-2所示。若:(1)b在该基本块出口处不活跃;(2)b在该基本块出口处活跃;请分别给出下列代码经过优化之后的
6、代码:(1)a=b+c(2)b=a-d (3)c=b+c(4)d=a-d第五章第五章 代码优化代码优化 图5-2习题5.4的DAG图第五章第五章 代码优化代码优化 【解答】(1)当b在出口处不活跃时,生成优化后的代码为 a=b0+c0 d=a-d0 c=d+c0 (2)当b在出口活跃时,生成优化后的代码为 a=b0+c0 b=a-d0 d=b c=d+c0第五章第五章 代码优化代码优化 5.5 对于基本块P:S0=2S1=3/S0S2=T-CS3=T+CR=S0/S3H=RS4=3/S1S5=T+CS6=S4/S5H=S6*S2第五章第五章 代码优化代码优化 (1)应用DAG对该基本块进行优化
7、;(2)假定只有R、H在基本块出口是活跃的,试写出优化后的四元式序列。【解答】(1)根据DAG图得到优化后的四元式序列为S0=2S4=2S1=1.5S2=T-C第五章第五章 代码优化代码优化 S3=T+CS5=S3R=2/S3S6=RH=S6*S2(2)若只有R、H在基本块出口是活跃的,优化后的四元式序列为S2=T-CS3=T+CR=2/S3H=R*S2第五章第五章 代码优化代码优化 5.6 试画出如下中间代码序列的程序流图,并求出:(1)各结点的必经结点集合D(n);(2)流图中的回边与循环。J=0L1:I=0if I 8 goto L3L2:A=B+CB=D*C第五章第五章 代码优化代码优
8、化 L3:if B=0 goto L4writeBgotoL5L4:I=I+1ifI8gotoL2L5:J=J+1ifJ=3gotoL1halt第五章第五章 代码优化代码优化 【解答】(1)各结点的必经结点集分别为D(n0)=n0D(n1)=n0,n1D(n2)=n0,n1,n2D(n3)=n0,n1,n3D(n4)=n0,n1,n3,n4D(n5)=n0,n1,n3,n5D(n6)=n0,n1,n3,n6D(n7)=n0,n1,n3,n6,n7程序流图如图5-3所示。第五章第五章 代码优化代码优化 图5-3习题5.6的程序流图第五章第五章 代码优化代码优化 由于有n5n2和n6n1,而n2不
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 编译 原理 课后 答案 第五 代码 优化
限制150内