编译原理习题(含答案)——16-19代码优化——哈工大陈鄞配套版本

编译原理习题(含答案)——15运行存储分配——哈工大陈鄞配套版本
2018年6月27日
编译原理习题(含答案)——20代码生成——哈工大陈鄞配套版本
2018年6月27日

编译原理习题(含答案)——16-19代码优化——哈工大陈鄞配套版本

代码优化_1

 

优化可生成()的目标代码。

A. 运行时间较短

B. 占用存储空间较小

C. 运行时间短但占用内存空间大

D. 运行时间短且占用存储空间小

 
 

基本块内的优化为 ( )

A. 代码外提,删除归纳变量

B. 删除多余运算,删除无用赋值

C. 强度削弱,代码外提

D. 循环展开,循环合并

 
 

对一个基本块来说,( )是正确的。

A. 只有一个入口语句和一个出口语句

B. 有一个入口语句和多个出口语句

C. 有多个入口语句和一个出口语句

D. 有多个入口语句和多个出口语句

 
 

在程序流图中,我们称具有下述性质( )

A. 它们是非连通的且只有一个入口结点

B. 它们是强连通的但有多个入口结点

C. 它们是非连通的但有多个入口结点

D. 它们是强连通的且只有一个入口结点

 
 

中间代码的优化依赖于具体的计算机。

A.

B. 

 
 

代码优化应以等价变换为基础,既不改变程序的运行结果,又能使生成的目标代码更有效。

A. 

B.

 
 

一个程序可用一个流图来表示。

A. 

B.

 
 

优化工作只能在中间代码这一层次上进行。

A.

B. 

 
 

代码优化_2

 
 

数据流分析的主要应用不包括( )

A. 到达定值分析

B. 活跃变量分析

C. 可用表达式分析

D. 自然循环分析

 
 

以下说法不正确的是( )

A. 大部分全局优化是基于数据流分析技术实现的

B. 数据流分析是一组用来获取程序执行路径上的数据流信息的技术

C. 在每一种数据流分析应用中,都会把每个程序点和一个数据流值关联起来

D. 一个语句之前和之后的数据流值不受该语句的语义的约束

 
 

以下说法不正确的是( )

A. 一个赋值语句之前和之后的数据流值的关系被称为传递函数

B. 传递函数有两种风格,一种是信息沿执行路径前向传播,称为前向数据流问题;另一

种是信息沿执行路径逆向传播,称为逆向数据流问题

C. 在逆向数据流问题中,一个语句s的传递函数以语句前的数据流值作为输入,以语句后的数据流值作为输出

D. 设基本块B由语句 , , …, 顺序组成,则 输出的数据流值与 输入的数据流值

相同

 
 

以下说法不正确的是( )

A. 变量x的定值是(可能)将一个值赋给x的语句

B. 假设存在一条从紧跟在x的定值d后面的点到达某一程序点p的路径,如果在此路径上

有对变量x的其它定值d′,则称定值d被定值d′ “杀死

C. 如果存在一条从紧跟在x的定值d后面的点到达某一程序点p的路径,则称定值d到达

程序点p

D. 直观地讲,如果某个变量x的一个定值d到达点p,在点p处使用的x的值可能就是由d

最后赋予的

 
 

以下说法不正确的是( )

A. 基本块B的传递函数fB可以通过将基本块中各语句的传递函数组合起来得到

B. 如果循环中含有赋值x=y+z ,而yz所有可能的定值都在循环外面包括yz是常数

的特殊情况,那么y+z就是循环不变计算

C. 定值d: u = v + w “生成了一个对变量u的定值d,并 杀死了程序中其它对u的定值

D. 对于到达定值问题,一个基本块BIN值等于它的所有前驱基本块POUT值的交集

 
 

下图中,可以到达基本块B3的入口处的定值集合是()

 

 

关于下图的叙述中,错误的是( )

 

 

 

以下说法不正确的是()

A. 引用定值链( ud-chains) 是一个列表,对于变量的每一 次引用,到达该引用的所有

定值都在该列表中

B. 如果块B中变量a的引用之前有a的定值,那么只有a的最后一次定值会在该引用的ud

链中

C. 如果块B中变量a的引用之前没有a的定值,那么a的这次引用的ud链就是IN[B]a

定值的集合

D. 如果块B中变量a的引用之前没有a的定值,那么只有a的最后一次定值会在该引用的

ud链中

 
 

 代码优化_3

 

以下属于逆向数据流问题的是( )

A. 到达定值分析

B. 活跃变量分析

C. 可用表达式分析

D. 寻找支配结点

 
 

以下说法不正确的是()

A. 对于变量x和程序点p,如果在流图中沿着从p开始的某条路径会引用变量xp点的

值,则称变量x在点p是活跃的,否则称变量x在点p不活跃

B. 变量在某点活跃,表示变量在该点的值在以后会被使用

C. 判断在基本块出口之后,变量的值是否还被引用的这种判断工作称为活跃变量分析

D. 对于活跃变量问题,一个基本块BOUT值等于它的所有后继基本块SIN值的交集

 
 

以下说法不正确的是()

A. 活跃变量信息可用于检测循环不变计算

B. 无用赋值:如果x在点p的定值在基本块内所有后继点都不被引用,且在基本块出口之

后又是不活跃的,那么x在点p的定值就是无用的

C. 活跃变量信息可用于为基本块分配寄存器

D. 如果所有寄存器都被占用,并且还需要申请一个寄存器,则应该考虑使用已经存放了

死亡值的寄存器,因为这个值不需要保存到内存

 
 

下图中,基本块 B1的出口处的活跃变量集合是( )

 

A. {N}

B. {I}

C. {NI}

D. 空集

 
 

以下说法不正确的是( )

A. 设变量x有一个定值d,该定值所有能够到达的引用u的集合称为xd处的定值引用

链,简称du

B. 如果在求解活跃变量数据流方程中的OUT[B]时,将OUT[B]表示成从基本块B的末尾

处能够到达的引用的集合,那么,可以直接利用这些信息计算基本块B中每个变量x

在其定值处的du

C. 如果基本块Bx的定值d之后有x的第一个定值d′,则dd′之间x的所有引用构成d

du

D. 如果基本块Bx的定值d之后有x的新的定值,则Bd之后x的所有引用以及OUT[B]

x的所有引用构成ddu

 
 

以下说法不正确的是( )

A. 如果从流图的首节点到达程序点p的每条路径都对表达式x op y进行计算,那么表达

x op y在点p是可用的

B. x的引用点u可以用y代替x的条件是:复制语句x = y在引用点u处可用

C. x的引用点u可以用y代替x的条件是:从流图的首节点到达u的每条路径都存在复制

语句x = y,并且从最后一条复制语句x = y到点u之间没有再次对xy定值

D. 如果一个值在基本块结尾处是死的就不必在结尾处保存这个值

 
 

 代码优化_4

删除公共子表达式需要用到以下哪种数据流分析技术( )

A. 到达定值分析

B. 活跃变量分析

C. 可用表达式分析

D. 以上都不正确

 
 

复制传播需要用到以下哪种数据流分析技术( )

A. 到达定值分析

B. 活跃变量分析

C. 可用表达式分析

D. 以上都不正确

 
 

删除无用代码需要用到以下哪种数据流分析技术( )

A. 到达定值分析

B. 活跃变量分析

C. 可用表达式分析

D. 以上都不正确

 
 

识别循环不变计算需要用到以下哪种数据流分析技术( )

A. 到达定值分析

B. 活跃变量分析

C. 可用表达式分析

D. 以上都不正确

 
 

关于支配结点的二元关系,下列叙述中不正确的是( )

A. 满足自反性

B. 满足传递性

C. 满足反对称性

D. 满足对称性

 
 

下列优化方法( )不是针对循优化进行的。

A. 强度削弱

B. 删除归纳变量

C. 删除多余运算

D. 代码外提

 
 

程序流图中,若mn的必经节点,并且存在有向边n→m,则称n→m是流图中的( )

A. 一个循环

B. 一条回边

C. 一条基本边

D. 一个基本通图

 
 

程序流图中,具有性质( )的节点序列为一个自然循环。

A. 它们是非连通的且只有一个入口节点

B. 它们是强连通的但有多个入口节点

C. 它们是非连通的但有多个入口节点

D. 它们是强连通的且只有一个入口节点

 
 

采用DAG图不可以实现的优化有( )

A. 合并已知量

B. 删除公共子表达式

C. 删除无用赋值

D. 删除归纳变量

 
 

10 ( )属于局部优化。

A. 代码外提

B. 删除多余运算

C. 强度削弱

D. 删除归纳变量

 
 

11 以下说法正确的是( )

A. 进行代码优化时要着重考虑循环的代码优化,这对提高目标代码的效率将起更大作用

B. 强度削弱是局部优化的一种方法

C. 循环不变计算都可以移动到循环之前

D. 循环中的无用赋值在循环优化时均可删除

 
 

12 以下说法不正确的是( )

A. 为了找出程序中的循环,就需要对程序中的控制流程进行分析

B. 在循环中强度削弱仅对乘法运算实行

C. 仅考虑一个基本块,不能确定一个赋值是否真是无用的

D. 在间代码优化中循环上的优化主要有不变表达式外提和削减运算强度

发表评论

邮箱地址不会被公开。 必填项已用*标注