什麼是行內展開

將函式的呼叫替換成被呼叫函式本體的最佳化。省去呼叫的負擔,也使其他最佳化更容易生效,但程式碼會變大。

日文名稱: インライン展開

「行內展開」出現在1領域的4道練習題中(編譯器等)。

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

練習行內展開的題目

關於函式行內展開(inline expansion)的優點與缺點,下列組合何者正確?

  1. A優點是程式碼變小,缺點是呼叫的開銷增加
  2. B優點是編譯能更快完成,缺點是執行結果會改變
  3. C優點是呼叫的開銷消失,缺點是程式碼變大
查看答案與解析

正確答案:C. 優點是呼叫的開銷消失,缺點是程式碼變大

行內展開會把函式主體嵌入取代呼叫,因此引數傳遞、分支與返回的開銷都消失了。此外,呼叫端的常數等會傳到主體中,使常數摺疊與無用程式碼刪除得以生效,這是很大的優點。另一方面,每次呼叫都會產生一份主體的副本,程式碼因此變大,指令快取的未命中也可能增加,所以會挑選小型函式或經常被呼叫的函式來進行。只要正確進行,執行結果不會改變。

解析中的「行內展開」

出現「行內展開」的題目(4題)

  1. 關於函式行內展開(inline expansion)的優點與缺點,下列組合何者正確?
  2. 在上方程式碼中,將 sq 行內展開之後接著生效的最佳化,以及其結果,下列何者正確?
  3. 關於使用剖析資料的最佳化(PGO)的說明,下列何者正確?
  4. 下列何者最適合作為連結時最佳化(LTO)所能實現的最佳化?

相關名詞

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

前往名詞解釋列表