有没有任何工具可以调查堆内容? [已关闭]

问题描述 投票:0回答:3

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

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

c++ windows memory-management heap-memory
3个回答
2
投票

您可以使用 WinDBG(请参阅 !heap 命令)探索进程的堆分配和使用情况,WinDBG 是 Microsoft Windows 调试工具 免费集合的一部分。谷歌搜索有关使用的帮助,尽管我找到的最好的参考是标准参考书Advanced Windows Debugging


0
投票

您可以使用

_heapwalk
来查看当前组成堆的块 - 只是要注意,您得到的结果不会很精确。

显然,标记为正在使用的块告诉您当前在堆上分配的空间,但不一定是最大值。但是,(至少假设您没有调用

_heapmin
),堆中的空闲块之所以存在,是因为它们正在使用中,但随后被释放。

现在,很可能并非所有这些都在同一时间实际使用过。当释放一个小块并请求更大的块时,较小的块通常无法满足该请求。同时,您通常关心的是堆正在使用的最大内存,而其中一些内存在给定时间可能被视为“空闲”的事实并不一定很重要。因此,只需将“所有”块的大小相加即可对程序使用的最大堆大小(以及您使用的输入数据等)进行“相当”合理的估计。 _heapwalk的链接有一些演示代码。就目前而言,代码并不是很有用,但它确实展示了如何调用该函数,因此主要是将数据组合成一个数字(演示只是分别打印出每个块的数据) .

下面的链接中有一个工具可以满足您的需求,并且只能满足您的需求。
http://www.nirsoft.net/utils/heap_memory_view.html


0
投票
除了 Vista 之外,还经过测试并可在 Windows 7 x64 上运行。

© www.soinside.com 2019 - 2024. All rights reserved.