1. 程式人生 > >Linux核心完全註釋(0.11版)DAY2

Linux核心完全註釋(0.11版)DAY2

fs目錄是檔案系統實現程式的目錄,包含17個C語言程式。這些程式可分為四個部分:高速緩衝區管理、底層檔案操作、檔案資料訪問和檔案高層函式。核心檔案buffer.c是高速緩衝區程式,因為檔案系統資料訪問都需要首先讀取到高速緩衝區。


                                                 圖為fs目錄中各程式函式之間引用關係

標頭檔案主目錄include

標頭檔案目錄總共有32個.號檔案。其中include/主目錄下有13個頭檔案,其他標頭檔案則存放在asm(4個)、linux(10個)和sys(5個)三個子目錄

include/主目錄下標頭檔案主要提供核心和使用者程式的使用;sam/子目錄用於主要存放計算機硬體體系結構相關的標頭檔案;linux/子目錄用於存放linux核心專用標頭檔案;sys/子目錄用於存放一些檔案狀態、程序、系統資料型別等標頭檔案

Linux核心原始碼情景分析(上)

inline:行內函數,因為gcc從C++中吸收了很多語法,因此gcc既是C編譯又是C++編譯,其中inline就是C++語法。inline函式與#define類似,e.g.

#include <stdio.h>
//函式定義為inline即:行內函數
inline char* dbtest(int a) {
    return (i % 2 > 0) ? "奇" : "偶";
} 

int main()
{
   int i = 0;
   for (i=1; i < 100; i++) {
       printf("i:%d    奇偶性:%s /n", i, dbtest(i));    
   }
}

這裡用inline就將a%2可以寫為i%2,減少了棧空間的消耗(臨時變數),但inline不能用在結構複雜的函式裡面,因為這會大量消耗記憶體空間,並且inline是非強制的只是建議,編譯器會自動判別採用不。詳見這篇部落格

#define與inline的區別,當用#define進行巨集定義時預編譯時只是進行的簡單符號替換,並不具有檢查引數有效性。而inline預編譯時會檢查引數有效性。