這篇文章是《讀薄「Linux 內核設計與實現」》系列文章的第一篇,本文主要講了兩個問題:內核編程的特點以及 GNU C 在內核開發中的特點。
0x00 內核編程特點
- 無 libc 庫,不能訪問標準 C 文件
- 使用 GNU C
- 無內存保護機制
- 慎用浮點數計算
- 注意同步和併發
- 可移植性考慮:保持字節順序、64位對齊、不假定字長和頁面長度
0x01 GNU C
- 內聯函數:將函數展開至調用位置,省卻函數調用代價
- 內聯彙編:在確定體系結構的情況下,在 C 代碼中直接嵌入彙編代碼
- 分支聲明:分支時可根據預知條件發生的概率進行優化
例:
if(error){
/* do something */
}
優化後:
if(unlikely(error)){ //error爲0的概率大
/* do something */
}
或:
if(likely(success)){ //success爲0的概率大
/* do something */
}
本文的版權歸作者 羅遠航 所有,採用 Attribution-NonCommercial 3.0 License。任何人可以進行轉載、分享,但不可在未經允許的情況下用於商業用途;轉載請註明出處。感謝配合!