編譯器

在無用程式碼刪除(死碼消除)中被移除的對象,下列何者正確?

  1. A程式中最常執行、最重要部分的程式碼
  2. B不會被執行的部分,以及結果完全沒被用到的計算
  3. C用來將結果顯示在畫面上的輸出指令
查看答案與解析

正確答案:B. 不會被執行的部分,以及結果完全沒被用到的計算

無用程式碼刪除是一種最佳化,會移除條件恆為假而絕不會執行的分支內容,以及計算後結果沒被用到的指派等。在常數傳播與常數摺疊之後,會產生大量不再被使用的指派,因此經常搭配使用。經常執行的部分正是應該加速的重要部分,不可刪除。像輸出到畫面這種具有外部可見效果的指令,屬於程式結果的一部分,所以不會被刪除。

  • A. 經常執行的部分不可刪除。
  • B. 正確。移除不會執行的部分與沒被用到的計算。
  • C. 具有外部可見效果的指令不會被刪除。
練習這個領域 前往領域頁面

編譯器的其他題目

  1. 關於函式行內展開(inline expansion)的優點與缺點,下列組合何者正確?
  2. 關於迴圈展開(loop unrolling)的主要效果,下列何者正確?
  3. 在上方迴圈中,哪個計算會成為迴圈不變運算式搬移(搬到迴圈外)的對象?(假設 x、y 在迴圈內不會被更動)
  4. 對上方迴圈中的索引計算 i * 4 進行強度削減時,下列轉換何者正確?
  5. 上方迴圈難以使用SIMD指令向量化,其主要原因為何?

這個領域的比較