static inline內嵌函數的理解


內聯函數有些類似於宏。內聯函數的代碼會被直接嵌入在它被調用的地方,調用幾次就嵌入幾次,沒有使用call指令。這樣省去了函數調用時的一些額外開銷,比如保存和恢複函數返回地址等,可以加快速度。不過調用次數多的話,會使可執行文件變大,這樣會降低速度。相比起宏來說,內核開發者一般更喜歡使用內聯函數。因爲內聯函數沒有長度限制,格式限制。編譯器還可以檢查函數調用方式,以防止其被誤用。
static inline的內聯函數,一般情況下不會產生函數本身的代碼,而是全部被嵌入在被調用的地方。如果不加static,則表示該函數有可能會被其他編譯單元所調用,所以一定會產生函數本身的代碼。所以加了static,一般可令可執行文件變小。內核裏一般見不到只用inline的情況,而都是使用static inline。

inline

關鍵字inline表明要優化函數的可執行代碼,這可以通過將函數的代碼合併到調用程序的代碼中來實現。Linux內核使用的inline函數大多被定義爲static 類型。一個"static inline"函數促使編譯程序嘗試着將其代碼插入到所有調用它的程序中。

這一合併能夠免除函數調用的任何開銷,#define語句也可以排除額外的函數調用。

另外,使用inline會增加二進制映像的大小,而這會降低訪問CPU高速緩存的速度,所以不能在所有的函數定義中使用它。

發佈了16 篇原創文章 · 獲贊 3 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章