Windows 堆内存是性能仅次于虚拟内存的内存管理机制。它不像虚拟内存,每次分配至少是一个页面(4K),它可以灵活的只分配 1 个字节来使用,不浪费内存的空间。但你分配的内存必须由自己维护释放。下面演示了堆内存的使用方法。
最简单的堆使用
1 | #include <Windows.h> |
查询进程中堆内存的详细使用信息
同虚拟内存一样,堆内存也可以遍历得到每一块堆内存的使用情况,主要用到的就是 HeapWalk
函数,下面的图片介绍了不同堆类型的不同属性值,图片下面是代码实现,参考者图看代码更容易理解。
1 | #include <tchar.h> |
低碎块堆
所谓低碎块堆实际就是增加了内存对齐的机制,对齐后内存最小颗粒度为 8 个字节,分配内存时,比如指定了 10 个字节,那么实际也会分配 16 (8的最小整数倍)个字节。这样做目的是为了减少内存碎块化严重而导致缺少很多连续的内存地址空间。降低了因需要合并内存碎块而造成的额外开销,从而提升了性能。以下是具体实现代码。
1 | #include <tchar.h> |