內聯展開

內聯展開 （ 或稱內聯 ， 下文或交替使用 ） 是一種將函數體直接展開到調用處的一種優化技術 。 它可以由手工指定 （ 如inline關鍵字 ） ， 或者經由編譯優化自動完成 。 內聯展開類似於宏展開 ， 區別在於內聯展開在編譯時完成 ， 而宏展開則可能在預編譯 （ 如C / C++ ） 、 編譯時 （ 如Scheme ） 、 運行時 （ 如Scheme ） 時完成 。 內聯是一種重要的優化技術 。 內聯的好處主要在於消除函數的調用開銷 （ 壓棧 ， 保護 / 恢復現場 ） ， 但內聯展開對於性能的提升不能一概而論 ， 它可能導致生成的代碼體積膨脹 ， 並且影響指令緩存的命中率 。 有研究表明函數內聯展開在緩存小的時候能提升性能 ， 緩存較大的時候性能有可能下降 。 除此之外 ， 內聯展開會引入大量冗餘代碼 ， 需要通過一系列編譯優化步驟進行縮減 。 比如一個記錄 （ 或理解爲結構體 ） 中的值是不變的 ， 那麼可以將其值直接替換到引用處 ； 邏輯上不被使用到的分支代碼或者變量 ， 會被自動消除掉 ； 邏輯上不可能進入的分支也可以消除掉 。 通過這些優化可以極大縮減冗餘的代碼 ， 使得程序編譯後獲得較爲緊湊的體量 。