日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

慢慢学Linux驱动开发,第十章,GNU C的扩展

發布時間:2023/11/27 生活经验 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 慢慢学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的扩展的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。