kmalloc第二個引數的意義

2021-07-23 08:35:23 字數 716 閱讀 8578

最近在進行linux核心程式設計的時候使用到了kmalloc用於申請記憶體,kmalloc與mlloc相似,用於獲取一段連續的記憶體空間,其不會對獲取到的記憶體空間清零。

kmlloc的原型是void *kmalloc(size_t size, int flags); 第乙個引數size表示要分配的記憶體大小,第二個引數這是分配標誌。之前使用的時候對第二個引數並沒有太關注,以為只是固定的填寫gfp_kernel,直到無意中看到別人寫的**中有時填寫了其它值才去查閱了資料詳細學習了一下。

首先先看一下最常用的gfp_kernel,它表示記憶體分配是由執行在核心空間的程序執行的,也就是呼叫它的函式正代表某個程序執行系統呼叫。gfp_kernel表示允許kmalloc在空閒記憶體較少的時候把當前程序轉入休眠以等待乙個頁面,因此,使用gfp_kernel申請記憶體的函式必須是可重入的。

gfp_atomic是另乙個重要的標誌,其主要用於中斷處理例程或者其它執行在程序上下文之外的**中分配記憶體,它不會休眠。核心中通常會為原子性的分配預留一些空閒頁面,使用該標誌時,kmalloc甚至可以用掉最後乙個空閒頁面。

除了這兩種常用的標誌外,還有gfp_user(用於為使用者空間分配記憶體,可能會休眠),gfp_highuser(與gfp_user類似,存在高階記憶體時從高階記憶體中分配),gfp_noio(與gfp_kernel類似,不允許io的初始化),gfp_nofs(與gfp_kernel類似,不允許執行檔案系統呼叫),這些標誌都用於一些特定的場景下,使用頻率遠遠沒有上兩個大。

json encode 的第二個引數詳解

下列常量由此擴充套件定義,且僅在此擴充套件編譯入 php 或在執行時動態載入時可用。以下常量表示了 json last error 所返回的錯誤型別。json error none integer 沒有錯誤發生。自 php 5.3.0 起生效。json error depth integer 到達了...

jQuery 方法的第二個引數

關於jquery 方法的第二個引數,有下面這幾種用法 1.jquery selector,context 這種用法,相當於 context find selector 或者 context.find selector 2.jquery html,ownerdocument 文件對ownerdocum...

listen的第二個引數詳解

之前對於listen的第二個引數的理解,只是停留在它代表伺服器緩衝區佇列的大小層面上,具體並沒有詳細研究過,一次偶然的tcp實驗,發現了很大的bug。當伺服器端沒有呼叫accept函式時,此時3個客戶端同時連線伺服器,用netstat檢視伺服器狀態,但是當啟動第4個客戶端時,發現客戶端狀態正常,伺服...