我使用SysInternals的VMMap来查看WinXP上我的Win32 C++进程分配的内存,并且我看到一堆分配,其中分配内存的一部分被保留但未提交。据我所知,从我的阅读和测试中,在C++程序中使用的所有常见内存分配器(例如,malloc,new,LocalAlloc,GlobalAlloc)总是分配完全承诺的内存块。 堆是代码的一个常见示例,它保留内存但在需要之前不提交它。我怀疑其中一些块是Windows/CRT堆,但似乎有更多的这些类型的块比我预期的堆。在我的过程中,我看到这些块中有30个块的大小在64k到8MB之间,我知道我的代码从不故意调用VirtualAlloc来分配保留的,未提交的内存。我的过程中所有这些未提交的保留内存是什么?
这里有几个例子,从的VMMap:http://www.flickr.com/photos/[email protected]/5280550393/
什么人会分配内存这样的块,其中它更是保留但未提交?我的过程有30堆是否合理?谢谢。
我不认为在一次两个地方发布完全相同的问题并不是很好。 http://forum.sysinternals.com/uncommitted-reserved-memory-in-my-process_topic24690.html – wj32 2010-12-21 21:29:10
我认为这很好。 Sysinternals是VMMap工具的作者,因此他们可能知道他们的工具为什么要报告这些信息。 StackOverflow上的人们可能知道哪些代码会以这种模式分配内存。两个不同的受众可能不会阅读这两个论坛。 – Art 2011-01-04 19:18:59