是否有任何工具来调查堆内容
Is there any tool to investigate heap contents?
我想知道是否有任何工具来调查峰值堆内容?
例如,我有一个用c++编写的应用程序(MSVS2005),我想知道峰值堆消耗和它的内容。
问候,马克西姆
您可以使用WinDBG(参见!heap命令)来探索进程的堆分配和使用情况,WinDBG是Microsoft的Windows调试工具的免费集合的一部分。尽管我找到的最好的参考资料是标准的参考书《高级Windows调试》
您可以使用_heapwalk
来查看当前构成堆的块—只是要注意您得到的结果不会是精确的。
显然,标记为正在使用的块告诉您当前在堆上分配的空间,但不一定是最大值。然而,(至少假设您没有调用_heapmin
),堆中的空闲块在那里是因为它们正在使用,但随后被释放。
现在,很可能不是所有这些都在同一时间被使用。当一个小块被释放,并且请求一个更大的块时,较小的块通常无法满足该请求。与此同时,您通常关心的是堆正在使用的最大内存,而在给定时间内,其中一些可能被认为是"空闲"的事实并不一定很重要。因此,只需将所有块的大小加起来,就可以得出相当合理的程序使用的最大堆大小估计(使用输入数据等)
_heapwalk
的链接有一些演示代码。目前,这段代码并不是很有用,但它确实展示了如何调用该函数,所以它主要是将数据放在一个数字中(其中演示只是分别打印出每个块的数据)。
下面的链接有一个工具可以做你想要的,而且只做你想要的。http://www.nirsoft.net/utils/heap_memory_view.html
已经过测试,可在Windows 7 x64和Vista上运行
相关文章:
- 如果C++类在类方法中具有动态分配,但没有构造函数/析构函数或任何非静态成员,那么它仍然是POD类型吗
- 奇怪的(对我来说)返回声明 - 在谷歌上找不到任何关于它的信息
- 如何在不产生任何垃圾的情况下获得C中的像素
- 为什么我不能在 C++ 中的特定函数重载中调用同一函数的任何其他重载?
- C++映射有2个键,这样任何1个键都可以用来获取值
- Visual Studio(或任何其他工具)能否将地址解释为调用堆栈(boost上下文)的开头
- RtlCaptureStackBackTrace未捕获任何帧
- 链表c++插入,所有情况都已检查,但没有任何工作
- C++模板函数,用于比较任何无符号整数和有符号整数
- Arduino millis() - millis() 怎么能等于 0 以外的任何东西?
- 尝试摆脱任何堆内存分配
- 是否有任何C++功能可以对地图进行排序?
- 打印时有二叉树问题.用户输入不打印任何内容
- 共享指针和具有自定义删除程序的唯一指针之间的语法差异背后的任何原因
- 在C++行尾写一个分号或多个分号是否会改变任何内容
- C++类型特征,以查看是否可以<uint32_t>对类型"K"的任何变量调用"static_cast(k)"
- C++ 将 CIN 值存储到任何类型的数组中
- 为什么瓦尔格林德在不释放恶意内存后没有报告任何问题?
- GStreamer在开始任何播放之前进行搜索
- 是否有任何工具来调查堆内容