最近在看linuxkernel development,這本書主要是講了linux核心的概念,對於整體的框架有了乙個描述,這裡記錄下看到的一些有用的東西,便於以後整理。
inline這個名稱就可以反映出它的工作方式,函式會在它所呼叫的位置上展開。這麼做可以消除函式呼叫和返回所帶來的開銷(暫存器儲存和恢復),而且,由於編譯器會把呼叫函式的**和函式本身放在一起優化,所以也有進一步優化**的可能。不過這麼做是有代價的,**會變長,這就意味著占用更多的記憶體空間或者占用更多的指令快取。核心開發者通常把那些對時間要求比較高,而本身長度又比較短的函式定義成內聯函式。如果你把乙個大塊頭的程式做成了內聯函式,卻不需要爭分奪秒,反而反覆呼叫它,這麼做就失去了內聯的意義了。
總結:對於簡短的函式並且呼叫次數比較多的情況,適合使用內聯函式。
使用方法:定義乙個內聯函式的時候,需要使用static作為關鍵字,並且用inline限定它(沒試過,暫且留在這裡)。比如:
static inline void dog(unsigned long tail_size);
內聯函式必須在使用前就定義好,否則編譯器就沒法把這個函式展開。實踐中一般在標頭檔案中定義內聯函式。由於使用了static作為關鍵字進行限制,所以在編譯時不會為內聯函式單獨建乙個函式體(這裡不太明白)。如果乙個內聯函式僅僅在某個原始檔中使用,那麼也可以把它定義在該檔案開始的地方。
注意:在核心中,為了型別安全的原因,優先使用內聯函式而不是複雜的巨集。
內聯函式的優缺點
內聯函式的優缺點 說明 內聯函式發生在程式的編譯期間,多對於重複利用,程式執行又比較簡短的,大大增大 執行 效率。優點 1 inline定義的內聯函式,函式 被放入符號表中,在使用時進行替換 像巨集一樣展開 效率很高 2 類的內聯函式也是函式。編繹器在呼叫乙個內聯函式,首先會檢查引數問題,保證呼叫正...
內聯的優缺點
內聯函式是指用inline關鍵字修飾的函式。在類內定義的函式被預設成內聯函式。內聯函式從源 層看,有函式的結構,而在編譯後,卻不具備函式的性質。內聯函式不是在呼叫時發生控制轉移,而是在編譯時將函式體嵌入在每乙個呼叫處。編譯時,類似巨集替換,使用函式體替換呼叫處的函式名。一般在 中用inline修飾,...
inline 內聯函式
一 inline關鍵字用來定義乙個類的內聯函式,引入它的主要原因是用它替代c中表示式形式的巨集定義。表示式形式的巨集定義一例 define expressionname var1,var2 var1 var2 var1 var2 為什麼要取代這種形式呢,且聽我道來 1 首先談一下在c中使用這種形式巨...