热门问题
时间线
聊天
视角

行內展開

将函数体展开至调用处的一种优化技术 来自维基百科,自由的百科全书

Remove ads

行內展開(或稱行內,下文或交替使用)是一種將函式體直接展開到呼叫處英語Call site的一種最佳化技術。它可以由手工指定(如inline關鍵字),或者經由編譯最佳化自動完成。行內展開類似於展開,區別在於行內展開在編譯時完成,而宏展開則可能在預編譯(如C/C++)、編譯時(如Scheme)、執行時(如Scheme)時完成。

行內是一種重要的最佳化技術。行內的好處主要在於消除函式的呼叫開銷(壓棧,保護/恢復現場),但行內展開對於效能的提升不能一概而論,它可能導致生成的代碼體積膨脹,並且影響指令快取的命中率。有研究表明函式行內展開在快取小的時候能提升效能,快取較大的時候效能有可能下降[1]

除此之外,行內展開會引入大量冗餘代碼,需要通過一系列編譯最佳化步驟進行縮減。比如一個記錄(或理解為結構體)中的值是不變的,那麼可以將其值直接替換到參照處;邏輯上不被使用到的分支代碼或者變數,會被自動消除掉;邏輯上不可能進入的分支也可以消除掉。通過這些最佳化可以極大縮減冗餘的代碼,使得程式編譯後獲得較為緊湊的體量。[2][3]

Remove ads

參考資料

Loading related searches...

Wikiwand - on

Seamless Wikipedia browsing. On steroids.

Remove ads