【发布时间】:2011-05-29 01:05:15
【问题描述】:
我正在使用 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 个堆有意义吗?谢谢。
【问题讨论】:
-
我认为同时在两个地方发布完全相同的问题并不是一件好事。 forum.sysinternals.com/…
-
我觉得完全没问题。 Sysinternals 是 VMMap 工具的作者,所以他们可能知道他们的工具为什么会报告此类信息。 StackOverflow 上的人可能知道哪些代码会以这种模式分配内存。两个不同的受众可能不会同时阅读这两个论坛。
标签: windows memory-management sysinternals