堆的优缺点:
优点:让我们专心解决手头问题,不必理会分配粒度和页边界这类事情。
缺点:分配和释放内存块的速度比其他方式慢,而且也无法对物理存储器的调拨和撤销进行直接控制。
什么是堆:
堆就是一块预订的地址空间区域。刚开始,区域大部分页面都没以调拨物理存储器。随前我们不断的从堆中分配内存,堆管理器会给堆调拨越来越多的物理存储器。这些物理存储器都是从页交换文件中分配的。释放堆中的内存块时,堆管理器会撤销已调拨的物理存储器。
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