堆的優缺點:
優點:讓我們專心解決手頭問題,不必理會配置設定粒度和頁邊界這類事情。 缺點:配置設定和釋放記憶體塊的速度比其他方式慢,而且也無法對實體存儲器的調撥和撤銷進行直接控制。
什麼是堆:
堆就是一塊預訂的位址空間區域。剛開始,區域大部分頁面都沒以調撥實體存儲器。随前我們不斷的從堆中配置設定記憶體,堆管理器會給堆調撥越來越多的實體存儲器。這些實體存儲器都是從頁交換檔案中配置設定的。釋放堆中的記憶體塊時,堆管理器會撤銷已調撥的實體存儲器。
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