编译原理机测客观题(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 | | | | |
| | | | | |
| | | | | |
| | | | | |

相关推荐
初晴や8 分钟前
【C++】图论:基础理论与实际应用深入解析
c++·算法·图论
李泽辉_8 分钟前
深度学习算法学习(五):手动实现梯度计算、反向传播、优化器Adam
深度学习·学习·算法
李泽辉_24 分钟前
深度学习算法学习(一):梯度下降法和最简单的深度学习核心原理代码
深度学习·学习·算法
꧁Q༒ོγ꧂27 分钟前
算法详解---大纲
算法
m0_6038887133 分钟前
Scaling Trends for Multi-Hop Contextual Reasoning in Mid-Scale Language Models
人工智能·算法·ai·语言模型·论文速览
Xの哲學36 分钟前
Linux io_uring 深度剖析: 重新定义高性能I/O的架构革命
linux·服务器·网络·算法·边缘计算
comli_cn43 分钟前
残差链接(Residual Connection)
人工智能·算法
Aaron15881 小时前
基于VU13P在人工智能高速接口传输上的应用浅析
人工智能·算法·fpga开发·硬件架构·信息与通信·信号处理·基带工程
予枫的编程笔记1 小时前
【论文解读】DLF:以语言为核心的多模态情感分析新范式 (AAAI 2025)
人工智能·python·算法·机器学习
im_AMBER1 小时前
Leetcode 99 删除排序链表中的重复元素 | 合并两个链表
数据结构·笔记·学习·算法·leetcode·链表