編譯器
關於函式行內展開(inline expansion)的優點與缺點,下列組合何者正確?
- A優點是程式碼變小,缺點是呼叫的開銷增加
- B優點是編譯能更快完成,缺點是執行結果會改變
- C優點是呼叫的開銷消失,缺點是程式碼變大
查看答案與解析
正確答案:C. 優點是呼叫的開銷消失,缺點是程式碼變大
行內展開會把函式主體嵌入取代呼叫,因此引數傳遞、分支與返回的開銷都消失了。此外,呼叫端的常數等會傳到主體中,使常數摺疊與無用程式碼刪除得以生效,這是很大的優點。另一方面,每次呼叫都會產生一份主體的副本,程式碼因此變大,指令快取的未命中也可能增加,所以會挑選小型函式或經常被呼叫的函式來進行。只要正確進行,執行結果不會改變。
- A. 程式碼反而會變大,呼叫的開銷則會減少。
- B. 只要正確進行,執行結果不會改變。
- C. 正確。呼叫開銷消失、最佳化範圍擴大,但程式碼會變大。