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