Loading AI tools
将函数体展开至调用处的一种优化技术 来自维基百科,自由的百科全书
內聯展開(或稱內聯,下文或交替使用)是一種將函數體直接展開到調用處的一種優化技術。它可以由手工指定(如inline關鍵字),或者經由編譯優化自動完成。內聯展開類似於宏展開,區別在於內聯展開在編譯時完成,而宏展開則可能在預編譯(如C/C++)、編譯時(如Scheme)、運行時(如Scheme)時完成。
內聯是一種重要的優化技術。內聯的好處主要在於消除函數的調用開銷(壓棧,保護/恢復現場),但內聯展開對於性能的提升不能一概而論,它可能導致生成的代碼體積膨脹,並且影響指令緩存的命中率。有研究表明函數內聯展開在緩存小的時候能提升性能,緩存較大的時候性能有可能下降[1]。
除此之外,內聯展開會引入大量冗餘代碼,需要通過一系列編譯優化步驟進行縮減。比如一個記錄(或理解為結構體)中的值是不變的,那麼可以將其值直接替換到引用處;邏輯上不被使用到的分支代碼或者變量,會被自動消除掉;邏輯上不可能進入的分支也可以消除掉。通過這些優化可以極大縮減冗餘的代碼,使得程序編譯後獲得較為緊湊的體量。[2][3]
Seamless Wikipedia browsing. On steroids.
Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.
Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.