是否有任何工具来调查堆内容

Is there any tool to investigate heap contents?

本文关键字:调查 任何 工具 是否      更新时间:2023-10-16

我想知道是否有任何工具来调查峰值堆内容?

例如,我有一个用c++编写的应用程序(MSVS2005),我想知道峰值堆消耗和它的内容。

问候,马克西姆

您可以使用WinDBG(参见!heap命令)来探索进程的堆分配和使用情况,WinDBG是Microsoft的Windows调试工具的免费集合的一部分。尽管我找到的最好的参考资料是标准的参考书《高级Windows调试》

您可以使用_heapwalk来查看当前构成堆的块—只是要注意您得到的结果不会是精确的。

显然,标记为正在使用的块告诉您当前在堆上分配的空间,但不一定是最大值。然而,(至少假设您没有调用_heapmin),堆中的空闲块在那里是因为它们正在使用,但随后被释放。

现在,很可能不是所有这些都在同一时间被使用。当一个小块被释放,并且请求一个更大的块时,较小的块通常无法满足该请求。与此同时,您通常关心的是堆正在使用的最大内存,而在给定时间内,其中一些可能被认为是"空闲"的事实并不一定很重要。因此,只需将所有块的大小加起来,就可以得出相当合理的程序使用的最大堆大小估计(使用输入数据等)

_heapwalk的链接有一些演示代码。目前,这段代码并不是很有用,但它确实展示了如何调用该函数,所以它主要是将数据放在一个数字中(其中演示只是分别打印出每个块的数据)。

下面的链接有一个工具可以做你想要的,而且只做你想要的。http://www.nirsoft.net/utils/heap_memory_view.html

已经过测试,可在Windows 7 x64和Vista上运行