什麼是常數摺疊

將編譯時就能確定值的運算式事先算好,替換成結果常數的最佳化。例如把 3 * 4 變成 12。可減少執行時的計算。

日文名稱: 定数畳み込み

「常數摺疊」出現在1領域的6道練習題中(編譯器等)。

這個名詞所屬的領域: 編譯器

練習常數摺疊的題目

關於編譯器的常數摺疊(constant folding),下列哪個範例正確?

  1. A將多次呼叫相同函式的部分,彙整為一次呼叫
  2. B將 x = 3 * 4 在編譯時計算,變成 x = 12
  3. C將迴圈主體並排4次份,以減少重複次數
查看答案與解析

正確答案:B. 將 x = 3 * 4 在編譯時計算,變成 x = 12

常數摺疊是一種最佳化,會事先計算在編譯時值就已確定的運算式,並替換為結果常數。3 * 4 每次執行都會得到相同的12,因此不需要在執行時做乘法。與常數傳播搭配使用時,連經由變數的計算也能一併摺疊。浮點數還有需要統一捨入方式等注意事項。並排迴圈主體的是迴圈展開,彙整函式呼叫則是另一種最佳化。

解析中的「常數摺疊」

出現「常數摺疊」的題目(6題)

  1. 關於編譯器的常數摺疊(constant folding),下列哪個範例正確?
  2. 對上方程式碼反覆進行常數傳播與常數摺疊,最終會變成什麼樣的程式碼?
  3. 對上方函式充分進行常數傳播、常數摺疊與無用程式碼刪除後,函式所回傳的值與剩餘的程式碼,下列何者正確?
  4. 在無用程式碼刪除(死碼消除)中被移除的對象,下列何者正確?
  5. 關於函式行內展開(inline expansion)的優點與缺點,下列組合何者正確?
  6. 在上方程式碼中,將 sq 行內展開之後接著生效的最佳化,以及其結果,下列何者正確?

相關名詞

行內展開 迴圈展開 中間表示法(IR) 共同子運算式消除 向量化 抽象語法樹(AST) 指令排程 基本區塊 強度削減 控制流程圖

前往名詞解釋列表