我使用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