天天看點

《windows核心程式設計》 18章 堆

堆的優缺點:

優點:讓我們專心解決手頭問題,不必理會配置設定粒度和頁邊界這類事情。 缺點:配置設定和釋放記憶體塊的速度比其他方式慢,而且也無法對實體存儲器的調撥和撤銷進行直接控制。

什麼是堆:

堆就是一塊預訂的位址空間區域。剛開始,區域大部分頁面都沒以調撥實體存儲器。随前我們不斷的從堆中配置設定記憶體,堆管理器會給堆調撥越來越多的實體存儲器。這些實體存儲器都是從頁交換檔案中配置設定的。釋放堆中的記憶體塊時,堆管理器會撤銷已調撥的實體存儲器。

18.1 程序預設堆

程序初始化時,系統會在程序位址空間建立一個堆。這個堆被稱為預設堆。我們可以建立應用程式使用/HEAP連結器開關來改變預設區域大小。 多個線程配置設定堆的時候是依次配置設定的。 GetProcessHeap()得到程序預設堆句柄

18.2 為什麼要建立額外的堆

對元件進行保護

更有效的記憶體管理

局部通路

避免線程同步的開銷

快整釋放

18.3 如何建立額外堆

HANDLE HeapCreate(fdwOptions,SIZE_T dwInitialSize,SIZE_T dwMaximumSize);

18.3.1  從堆中配置設定記憶體塊

HeepAlloc(HANDLE hHeap,DWORD fdwFlags,SIZE_T dwBytes);

18.3.1  調整記憶體塊大小

HeadReAlloc(…);

18.3.3 獲得記憶體塊大小

HeapSize(…)

18.3.4 釋放記憶體塊

HeapFree(…)

18.3.5 銷毀堆

BOOL HeapDestryoy(HANDLE hHeap);

18.3.6 c++中的堆操作

new 和 delete

18.4 其它堆函數

Heap32First,Heap32Next,Heap32ListFirst,Heap32ListNext,GetProcessHeaps HeapLock,HeapUnlock HeapWalk