linux kernel development 學習第一天之inline 和likely

1、解壓 bz2  tar jxvf

  解壓  gz   tar zxvf

2、關於內聯函數inline 關鍵字  http://blog.chinaunix.net/uid-9620812-id-1643070.html

   在程序編譯時,編譯器將程序中出現的內聯函數的調用表達式用內聯函數的函數體來進行替換。由於在編譯時將內聯函數體中的代碼替代到程序中,因此會增加目標程序代碼量,進而增加空間開銷,而在時間開銷上不象函數調用時那麼大,可見它是以目標代碼的增加爲代價來換取時間的節省。
   使用內聯函數時應注意以下幾個問題:
(1) 在一個文件中定義的內聯函數不能在另一個文件中使用。它們通常放在頭文件中共享。
(2) 內聯函數應該簡潔,只有幾個語句,如果語句較多,不適合於定義爲內聯函數。 
(3) 內聯函數體中,不能有循環語句、if語句或switch語句,否則,函數定義時即使有inline關鍵字,編譯器也會把該函數作爲非內聯函數處理。
(4) 內聯函數要在函數被調用之前聲明。

3、關於likely  和unlikely     http://blog.csdn.net/tommy_wxie/article/details/7384641

  對於short int 型數據 輸出格式是%hd

 在Linux內核中likely和unlikely函數有兩種(只能兩者選一)實現方式,它們的實現原理稍有不同,但作用是相同的.

#define likely(x) __builtin_expect(!!(x), 1)也就是說明x==1是“經常發生的”或是“很可能發生的”。
使用likely ,執行if後面語句的可能性大些,編譯器將if{}是的內容編譯到前面, 使用unlikely ,執行else後面語句的可能性大些,編譯器將else{}裏的內容編譯到前面。這樣有利於cpu預取,提高預取指令的正確率,因而可提高效率。

  注意:並不改變原來表達式的值  只是對判斷條件進行優化了而已。其輸出還是原來表達式的值。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章