我正在使用 SysInternals 的 VMMap 来查看我在 WinXP 上的 Win32 C++ 进程分配的内存,我看到了一堆分配,其中部分分配的内存被保留但未提交。据我所知,根据我的阅读和测试,C++ 程序中使用的所有常见内存分配器(例如 malloc、new、LocalAlloc、GlobalAlloc)总是分配完全提交的内存块。堆是保留内存但在需要时才提交的代码的常见示例。我怀疑其中一些块是 Windows/CRT 堆,但这些类型的块似乎比我预期的堆要多。我在我的进程中看到大约 30 个这些块,大小在 64k 和 8MB 之间,并且我知道我的代码从未故意调用 VirtualAlloc 来分配保留的、未提交的内存。
以下是 VMMap 的几个示例:http: //www.flickr.com/photos/95123032@N00/5280550393/
还有什么会分配这样的内存块,其中大部分是保留但未提交的?我的进程有 30 个堆有意义吗?谢谢。