static inline內聯函式剖析

2021-07-24 23:23:51 字數 549 閱讀 6671

內聯函式有些類似於巨集。

內聯函式的**會被直接嵌入在它被呼叫的地方,呼叫幾次就嵌入幾次,沒有使用call指令。

這樣省去了函式呼叫時的一些額外開銷,比如儲存和恢復函式返回位址等,可以加快速度。

static inline的內聯函式,一般情況下不會產生函式本身的**,而是全部被嵌入在被呼叫的地方。如果不加static,則表示該函式有可能會被其他編譯單元所呼叫,所以一定會產生函式本身的**。所以加了static,一般可令可執行檔案變小。核心裡一般見不到只用inline的情況,而都是使用static inline。

inline

關鍵字inline表明要優化函式的可執行**,這可以通過將函式的**合併到呼叫程式的**中來實現。linux核心使用的inline函式大多被定義為static 型別。乙個"static inline"函式促使編譯程式嘗試著將其**插入到所有呼叫它的程式中。

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

另外,使用inline會增加二進位制映像的大小,而這會降低訪問cpu快取記憶體的速度,所以不能在所有的函式定義中使用它。

static inline內聯函式

static inline的內聯函式,一般情況下不會產生函式本身的 而是全部被嵌入在被呼叫的地方。如果不加static,則表示該函式有可能會被其他編譯單元所呼叫,所以一定會產生函式本身的 所以加了static,一般可令可執行檔案變小。核心裡一般見不到只用inline的情況,而都是使用static i...

static inline內聯函式

今天在看hal層的標頭檔案的時候,看到static inline int sensors open,對inline有些不了解,在這記錄一下內聯函式有些類似於巨集。內聯函式的 會被直接嵌入在它被呼叫的地方,呼叫幾次就嵌入幾次,沒有使用call 指令。這樣省去了函式呼叫時的一些額外開銷,比如儲存和恢復函...

內聯函式,建構函式,靜態函

inline,static,constructor三種函式都不能帶有virtual關鍵字。inline是編譯時展開,必須有實體 static屬於class自己的,也必須有實體 virtual函式基於vtable 記憶體空間 constructor函式如果是virtual的,呼叫時也需要根據vtabl...