C++ 是否有任何工具可以调查堆内容?

C++ 是否有任何工具可以调查堆内容?,c++,windows,memory-management,heap,heap-memory,C++,Windows,Memory Management,Heap,Heap Memory,我想知道是否有任何工具可以调查峰值堆内容 例如,我有C++上编写的应用程序(MSVS2005),我想知道峰值堆消耗及其内容。 问候,, Maksim您可以使用WinDBG(请参阅!heap命令)探索进程的堆分配和使用情况,WinDBG是Microsoft的免费集合的一部分。尽管我找到的最好的参考书是《标准参考书》,但还是在谷歌上搜索一下,以获得有关用法的帮助。你可以使用它来查看当前组成堆的块——只是要知道,你得到的结果并不精确 显然,标记为正在使用的块告诉您当前在堆上分配的空间,但不一定告诉您最

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

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


Maksim

您可以使用WinDBG(请参阅!heap命令)探索进程的堆分配和使用情况,WinDBG是Microsoft的免费集合的一部分。尽管我找到的最好的参考书是《标准参考书》,但还是在谷歌上搜索一下,以获得有关用法的帮助。

你可以使用它来查看当前组成堆的块——只是要知道,你得到的结果并不精确

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

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


\u heapwalk
的链接中有一些演示代码。目前,代码不是很有用,但它确实显示了如何调用函数,因此主要是将数据合并到一个数字中(演示程序只需分别打印每个块的数据)。

下面的链接中有一个工具,它可以满足您的需要,并且只满足您的需要。


除Vista外,还可在Windows 7 x64上测试和使用。

Hmmvalgrind告诉您总使用量;也许通过一些调整,你可以让它分开分配和解除分配。GCC 4.6.2还打印出堆栈使用情况(静态)。
valgrind--tool=massif
在linux上做得很好(如果可以设置linux虚拟机并在那里运行代码):