慢慢学Linux驱动开发,第十章,GNU C的扩展
內核開發者使用的C語言涵蓋了ISO C99標準和GNU C擴展特性。這里簡單介紹一下GNU C的擴展特性。
1.內聯(inline)函數
GNU的C編譯器支持內聯函數,也是C++的一個特性之一。就是函數會在所調用的位置上展開,這樣做雖然會導致代碼量的增加,會占用更多的內存空間或者占用更多的指令緩存,但是確可以消除函數調用和返回所帶來的開銷,對于那些代碼量少又需要經常調用的函數來說還是必須的。所以很顯然對于一個很長的程序是不建議定義為內聯函數的。
定義一個內聯函數的時候,需要使用static作為關鍵字,并且用inline限定它:
static inline void Set_Bit(UINT8 res);
內聯函數必須在使用之前就定義好,否則編譯器就沒法把這個函數展開。實踐中一般在頭文件中定義內聯函數。由于使用了static作為關鍵字進行限制,所以編譯時不會為內聯函數單獨建立一個函數體。
因為宏定義不具有類型檢查的優點,所以建議優先使用內聯函數而不是復雜的宏。
2.內聯匯編
GCC編譯器支持在C函數中嵌入匯編指令。注意體系結構的不同,匯編不具有移植性。
3.分支聲明
對于條件選擇語句,gcc內建了一條指令用于優化,在一個條件經常出現,或者該條件很少出現的時候,編譯器可以根據這條指令對條件分支選擇進行優化。內核把這條指令封裝成了宏,比如likely()和unlikely():
/*foo幾乎不出現*/
if(unlikely(foo))
{}
/*foo經常出現*/
if(likely(foo))
{}
轉載于:https://www.cnblogs.com/pang123hui/archive/2012/03/08/2385768.html
總結
以上是生活随笔為你收集整理的慢慢学Linux驱动开发,第十章,GNU C的扩展的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 上海欢乐谷碰碰车收费吗
- 下一篇: 数据库设计的三大范式