編譯原理習題(含答案)——16-19程式碼優化——哈工大陳鄞配套版本
程式碼優化_1
1 優化可生成()的目的碼。
A. 執行時間較短
B. 佔用儲存空間較小
C. 執行時間短但佔用記憶體空間大
D. 執行時間短且佔用儲存空間小
2 基本塊內的優化為 ( )。
A. 程式碼外提,刪除歸納變數
B. 刪除多餘運算,刪除無用賦值
C. 強度削弱,程式碼外提
D. 迴圈展開,迴圈合併
3 對一個基本塊來說,( )是正確的。
A. 只有一個入口語句和一個出口語句
B. 有一個入口語句和多個出口語句
C. 有多個入口語句和一個出口語句
D. 有多個入口語句和多個出口語句
4 在程式流圖中,我們稱具有下述性質( )。
A. 它們是非連通的且只有一個入口結點
B. 它們是強連通的但有多個入口結點
C. 它們是非連通的但有多個入口結點
D. 它們是強連通的且只有一個入口結點
5 中間程式碼的優化依賴於具體的計算機。
A. 對
B. 錯
6 程式碼優化應以等價變換為基礎,既不改變程式的執行結果,又能使生成的目的碼更有效。
A. 對
B. 錯
7 一個程式可用一個流圖來表示。
A. 對
B. 錯
8 優化工作只能在中間程式碼這一層次上進行。
A. 對
B. 錯
程式碼優化_2
1 資料流分析的主要應用不包括( )。
A. 到達-定值分析
B. 活躍變數分析
C. 可用表示式分析
D. 自然迴圈分析
2 以下說法不正確的是( )。
A. 大部分全域性優化是基於資料流分析技術實現的
B. 資料流分析是一組用來獲取程式執行路徑上的資料流資訊的技術
C. 在每一種資料流分析應用中,都會把每個程式點和一個數據流值關聯起來
D. 一個語句之前和之後的資料流值不受該語句的語義的約束
3 以下說法不正確的是( )。
A. 一個賦值語句之前和之後的資料流值的關係被稱為傳遞函式
B. 傳遞函式有兩種風格,一種是資訊沿執行路徑前向傳播,稱為前向資料流問題;另一
種是資訊沿執行路徑逆向傳播,稱為逆向資料流問題
C. 在逆向資料流問題中,一個語句s的傳遞函式以語句前的資料流值作為輸入,以語句後的資料流值作為輸出
D. 設基本塊B由語句 , , …, 順序組成,則 輸出的資料流值與 輸入的資料流值
相同
4 以下說法不正確的是( )。
A. 變數x的定值是(可能)將一個值賦給x的語句
B. 假設存在一條從緊跟在x的定值d後面的點到達某一程式點p的路徑,如果在此路徑上
有對變數x的其它定值d′,則稱定值d被定值d′ “殺死”了
C. 如果存在一條從緊跟在x的定值d後面的點到達某一程式點p的路徑,則稱定值d到達
程式點p
D. 直觀地講,如果某個變數x的一個定值d到達點p,在點p處使用的x的值可能就是由d
最後賦予的
5 以下說法不正確的是( )。
A. 基本塊B的傳遞函式fB可以通過將基本塊中各語句的傳遞函式組合起來得到
B. 如果迴圈中含有賦值x=y+z ,而y和z所有可能的定值都在迴圈外面( 包括y或z是常數
的特殊情況) ,那麼y+z就是迴圈不變計算
C. 定值d: u = v + w “生成”了一個對變數u的定值d,並 “殺死”了程式中其它對u的定值
D. 對於到達定值問題,一個基本塊B的IN值等於它的所有前驅基本塊P的OUT值的交集
6 下圖中,可以到達基本塊B3的入口處的定值集合是()。
7 關於下圖的敘述中,錯誤的是( )。
8 以下說法不正確的是()。
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
1 以下屬於逆向資料流問題的是( )。
A. 到達-定值分析
B. 活躍變數分析
C. 可用表示式分析
D. 尋找支配結點
2 以下說法不正確的是()。
A. 對於變數x和程式點p,如果在流圖中沿著從p開始的某條路徑會引用變數x在p點的
值,則稱變數x在點p是活躍的,否則稱變數x在點p不活躍
B. 變數在某點活躍,表示變數在該點的值在以後會被使用
C. 判斷在基本塊出口之後,變數的值是否還被引用的這種判斷工作稱為活躍變數分析
D. 對於活躍變數問題,一個基本塊B的OUT值等於它的所有後繼基本塊S的IN值的交集
3 以下說法不正確的是()。
A. 活躍變數資訊可用於檢測迴圈不變計算
B. 無用賦值:如果x在點p的定值在基本塊內所有後繼點都不被引用,且在基本塊出口之
後又是不活躍的,那麼x在點p的定值就是無用的
C. 活躍變數資訊可用於為基本塊分配暫存器
D. 如果所有暫存器都被佔用,並且還需要申請一個暫存器,則應該考慮使用已經存放了
死亡值的暫存器,因為這個值不需要儲存到記憶體
4 下圖中,基本塊 B1的出口處的活躍變數集合是( )。
A. {N}
B. {I}
C. {N,I}
D. 空集
5 以下說法不正確的是( )。
A. 設變數x有一個定值d,該定值所有能夠到達的引用u的集合稱為x在d處的定值-引用
鏈,簡稱du鏈
B. 如果在求解活躍變數資料流方程中的OUT[B]時,將OUT[B]表示成從基本塊B的末尾
處能夠到達的引用的集合,那麼,可以直接利用這些資訊計算基本塊B中每個變數x
在其定值處的du鏈
C. 如果基本塊B中x的定值d之後有x的第一個定值d′,則d和d′之間x的所有引用構成d的
du鏈
D. 如果基本塊B中x的定值d之後有x的新的定值,則B中d之後x的所有引用以及OUT[B]
中x的所有引用構成d的du鏈
6 以下說法不正確的是( )。
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之間沒有再次對x或y定值
D. 如果一個值在基本塊結尾處是死的就不必在結尾處儲存這個值
程式碼優化_4
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 程式流圖中,若m是n的必經節點,並且存在有向邊n→m,則稱n→m是流圖中的( )
A. 一個迴圈
B. 一條回邊
C. 一條基本邊
D. 一個基本通圖
8 程式流圖中,具有性質( )的節點序列為一個自然迴圈。
A. 它們是非連通的且只有一個入口節點
B. 它們是強連通的但有多個入口節點
C. 它們是非連通的但有多個入口節點
D. 它們是強連通的且只有一個入口節點
9 採用DAG圖不可以實現的優化有( )。
A. 合併已知量
B. 刪除公共子表示式
C. 刪除無用賦值
D. 刪除歸納變數
10 ( )屬於區域性優化。
A. 程式碼外提
B. 刪除多餘運算
C. 強度削弱
D. 刪除歸納變數
11 以下說法正確的是( )。
A. 進行程式碼優化時要著重考慮迴圈的程式碼優化,這對提高目的碼的效率將起更大作用
B. 強度削弱是區域性優化的一種方法
C. 迴圈不變計算都可以移動到迴圈之前
D. 迴圈中的無用賦值在迴圈優化時均可刪除
12 以下說法不正確的是( )。
A. 為了找出程式中的迴圈,就需要對程式中的控制流程進行分析
B. 在迴圈中強度削弱僅對乘法運算實行
C. 僅考慮一個基本塊,不能確定一個賦值是否真是無用的
D. 在間程式碼優化中迴圈上的優化主要有不變表示式外提和削減運算強度