函數內聯 inline,__inline,__forceinline


▶ 感謝大佬的總結【http://www.cnblogs.com/xuemaxiongfeng/articles/2464850.html】

● 存儲限定符 __inline 與關鍵字 inline 的語義完全相同,不影響函數的類型,建議編譯器在合理的情況下內聯編譯 C/C++ 函數

內聯減少了函數調用的開銷,但卻增加了代碼量

inline 僅用於 C++,__inline和 __forceinline 用於 C/C++

編譯器處理內聯的情況:

  ■ 使用 /clr 編譯選項時,如果函數使用了安全屬性,則不會進行內聯

  ■ 類定義的同時定義其成員函數,則默認內聯,否則也可使用 inline 指定內聯

   使用__forceinline關鍵字,但內斂失敗,則給出 level 1 警告

 

__forceinline 強制內聯,不基於編譯器的性能和優化分析而依賴於程序員的判斷,仍不能內聯的情況:

  ■ 函數或其調用者使用 /Ob0 編譯器選項(Debug模式默認選項)

  ■ 函數和其調用者使用不同類型的異常處理。

  ■ 函數具有可變數目的參數

  ■ 函數使用了在線匯編(__asm{...}),但若開啟編譯選項 /Og,/Ox,/O1,/O2 則仍能內聯

  ■ 是虛函數並且是虛調用,但虛函數的直接調用可以內聯

  ■ 使用函數指針來對該函數進行調用

  ■ 函數被關鍵字 __declspec(naked) 修飾


 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM