我想知道是否有任何工具可以调查峰值堆内容?
例如,我有一个用C ++编写的应用程序(MSVS2005),我想知道峰值堆消耗及其内容。
此致 马克西姆
答案 0 :(得分:1)
您可以使用WinDBG(请参阅!heap命令)探索进程的堆分配和使用情况,这是Microsoft Debugging Tools for Windows免费集合的一部分。尽管我找到的最佳参考资料是标准参考书Advanced Windows Debugging。
,但谷歌仍在寻求使用方面的帮助答案 1 :(得分:0)
您可以使用_heapwalk
查看当前构成堆的块 - 只要知道您获得的结果将不准确。
显然,标记为正在使用的块会告诉您当前在堆上分配的空间,但不一定是最大值。但是,(至少假设你没有调用_heapmin
),堆中的空闲块就在那里,因为它们正在使用中,但随后被释放。
现在,很可能并非所有这些都在同一时间实际使用过。当一个小块被释放,并且请求一个更大的块时,较小的块通常将无法满足该请求。同时,你通常关心的是堆使用的最大内存,以及其中一些可能在给定时间被认为是“空闲”的事实并不一定重要。因此,只需将所有块的大小相加即可得出相当合理估计程序使用的最大堆大小(使用您使用的输入数据等)
_heapwalk
的链接有一些演示代码。就目前而言,代码不是很有用,但它确实显示了如何调用函数,因此主要是将数据放在一个数字中(演示只是分别打印出每个块的数据)
答案 2 :(得分:0)
下面的链接中有一个工具可以满足您的需求,而且只能满足您的需求。 http://www.nirsoft.net/utils/heap_memory_view.html
除了Vista之外,还在Windows 7 x64上进行了测试和工作。