编译原理机测客观题(7)优化和代码生成练习题
第十章优化和代码生成练习题
优化
知识点:
循环优化包括:代码外提、强度削弱、删除归纳变量、循环展开、循环合并
局部优化(基本块内优化):常量传播、常量折叠、公共子表达式消除、代数化简
全局优化(跨基本块优化):全局公共子表达式消除、复制传播、死代码消除、函数内联
一、单项选择题
1、优化可生成( )的目标代码。
A 运行时间较短 B.占用存储空间较小
C运行时间短但占用内存空间大 D.运行时间短且占用存储空间小
2、下列( )优化方法不是针对循优化进行的。
A.强度削弱 B.删除归纳变量 C.删除多余运算 D.代码外提
3、基本块内的优化为( )。
A.代码外提,删除归纳变量 B.删除多余运算,删除无用赋值
C.强度削弱,代码外提 D.循环展开,循环合并
4、关于必经结点的二元关系,下列叙述中不正确的是( )。
A满足自反性 B满足传递性 C满足反对称性 D满足对称性
5、对一个基本块来说,( )是正确的。
A 只有一个入口语句和一个出口语句
B 有一个入口语句和多个出口语句
C 有多个入口语句和一个出口语句
D有多个入口语句和多个出口语句
6、在程序流图中,我们称具有下述性质( )的结点序列为一个循环。
A它们是非连通的且只有一个入口结点
B它们是强连通的但有多个入口结点
C它们是非连通的但有多个入口结点
D它们是强连通的且只有一个入口结点
7、( )不可能是目标代码。
A汇编指令代码 B可重定位指令代码 C绝对指令代码 D中间代码
8、 经编译得到的目标程序是( )。
A. 机器语言程序或汇编语言程序
B. 四元式序列
C. 三元式序列
D. 二元式序列
9、在目标代码生成阶段,符号表用于( )。
A. 目标代码生成
B. 语义检查
C. 语法检查
D. 地址分配
10、所有编译程序都有目标代码生成阶段。( )
A. 对
B. 错
11、代码生成器的设计要着重考虑目标代码的质量问题。( )
A. 对
B. 错
12、目标代码生成时,无需考虑目标计算机的系统结构。( )
A. 对
B. 错
二、多项选择题
1、根据优化所涉及的范围,可将优化分为 。
a.局部优化 b.过程优化 c.全局优化
d.循环优化 e.四元式优化
2、下列优化中,属于循环优化的有 。
a.强度削弱 b.合并已知量 c.删除无用赋值
d.删除归纳变量 e.代码外提
3、如果a→b是程序流图中的一条边,则由这条回边构成的循环由 结点组成。
a.a b.b c.有通路到达b的结点
d.有通路到达a且该通路上不经过b的结点
e.有通路到达b且该通路上不经过a的结点
4、采用无环有向图(DAG),可以实现的优化有 。
a.合并已知量 b.删除公共子表达式 c.强度削弱
d.删除无用赋值 e.删除归纳变量
5、编译程序的输出结果可以是 。
a.目标代码 b.汇编语言代码 c.中间代码
d.优化后的中间代码 e.可重定位代码
三、填空题
1、局部优化是 一个基本块内 范围内进行的一种优化。
2、在一个基本块内,可实行3种优化方法,即合并已知量、删除公共子表达式、
删除无用赋值 。
3、优化就是对程序进行各种 等价 变换,使之能生成更有效的目标代码。
4、在优化中,可把循环中的 循环不变量 提到循环外面去,这种方法称为 代码外提 。
单选[解答]
1、优化的目的是使目标程序运行时间短、占用存储空间小,故选d。
2、删除多余运算属基本块优化,故选c。
3、基本块优化包括:合并已知量、删除无用赋值及删除多余运算,故选b。
4、必经结点满足自反性、传递性和反对称性关系,故选d。
5、选a。
6、选d。
7、选d。
多选[解答]
1、选a、c、d。
2、循环优化包括:代码外提、强度削弱、删除归纳变量、循环展开和循环合并,故选a、b、e。
3、如果a→b是回边,则该回边的构成的循环由结点a、b和能够到达a但通路不经过b的结点组成;故选a、b、d。
4、DAG图可进行基本块范围内的优化,故选a、b、d。
5、选b、c、d、e。
三、简述常用的优化技术有哪些?
序号 | 优化技术 |
1 | |
四、设有基本块
T1:=2
T2:=10/T1
T3:=S-R
T4:=S+R
A:=T2*T4
B:=A
T5:=S+R
T6:=T5*T3
B:=T6
(1)画出DAG图
(2)重建代码
序号 | 中间代码 |
1 | |
(3)假设基本块出口时只有A和B还被引用,请写出优化后的三地址代码序列。
序号 | 中间代码 |
1 | |
(4)假设有两个寄存器R0和R1可用,请给出(3)中三地址代码生成的目标代码序列,并给出寄存器描述和地址描述。
序号 | 中间代码 | 目标代码 | 寄存器描述 | 地址描述 |
1 | ||||