函式之ExAllocatePool 記憶體分配

2021-09-30 04:36:18 字數 650 閱讀 1940

如同c裡面的malloc一樣,核心模式下的exallocatepool也是非常重要的.但是一說到exallocatepool函式就不得不提exallocatepoolwithtag函式.對比一下兩個函式的呼叫方式:

pvoid p = exallocatepool(pool_type, size);

pvoid p = exallocatepoolwithtag(pool_type, size, tag);

在呼叫exallocatepoolwithtag的時候,系統會在要求的記憶體大小的基礎上再額外多分配4個位元組的標籤.這個標籤占用了開始的4個位元組,位於返回指標所指向位址的前面.這樣,當除錯時這個標籤可以幫助你識別有問題的記憶體塊.

在wdm.h(ntddk.h)中宣告了,記憶體分配函式無條件受預處理巨集pool_tagging控制(pool_tagging被無條件的定義).因此,即便是呼叫的exallocatepool函式,實際執行的卻是:exallocatepoolwithtag,其加入的標籤為"mdw",指明是wdm的記憶體塊.

又或者你強行關閉pool_tagging巨集再去呼叫exallocatepool,實際執行的還是exallocatepoolwithtag,並帶標籤"enon".

因此,建議在分配記憶體時,直接呼叫exallocatepoolwithtag並加上乙個自定義的標籤.

函式之過載函式

由於過載函式都是同名的,編譯器如何解析過載函式呢?發現函式 void print int i 編譯之後為 注意它的函式簽名變為 z5printi 利用反彙編技術,發現函式void print int i 編譯之後,它的函式簽名為 z5printi void print string str 編譯之後...

python函式之filter函式

例項環境 help filter help on built in function filter in module builtin filter filter function or none,sequence list,tuple,or string return those items of...

常見函式之字元函式

1 length 獲取引數值的位元組個數 eg select length joan 返回值為42 concat 拼接字串 eg select cncat last name,first name 姓名 from employees 3 upper lower eg 將姓變大寫,名變小寫。然後拼接在...