Windows 7操作系统中Windows任务管理器的哪些指标可用于查找内存泄漏?

时间:2012-10-23 09:21:26

标签: c++ c visual-c++

我想通过观察“windows任务管理器”进程选项卡来逐步增加内存,从而找到C ++程序的内存泄漏(使用Windows 7 OS)。 我很困惑,因为我看到很多列与我在“windows任务管理器”进程选项卡中列出的内存相关。 记忆 - 工作集 记忆 - 工作集Delta 记忆 - 私人工作集 内存 - 提交大小 内存 - 分页池 内存 - 非分页池

我在网上搜索了与此相关的主题,但我无法得到满意的答案。

请让我知道我应该使用哪个指标来检查内存的增加,以便我可以决定我的C ++代码\进程是否有内存泄漏。

FYI 我的局限是;我不能使用任何分析工具或静态代码分析工具,只能在系统上访问Windows任务管理器以查找内存泄漏。

3 个答案:

答案 0 :(得分:4)

正如其他海报所说,缓慢增加和小幅增加不会必然表明存在问题。

但是,如果你有一个长时间运行的过程,慢慢地消耗了比理论上应该要求的更多的内存(或者在类似的使用场景下在组件的健康版本中测量过),那么你可能有内存泄漏。我首先注意到组件中的组件存在问题,这些组件报告了组件使用的内存(通常使用大约2-3MB)。如果要查看进程内存的长期视图,则Perfmon非常有用。您可以按名称选择进程,然后选择专用字节度量,并设置时间和网格以测量(例如)24小时。

一旦确定进程内存有明显增加,就可以使用调试器,Valgrind,Parasoft,Glow Code等工具来确保您所看到的是真正的内存泄漏。但是,即使它不是真正的内存泄漏(未引用的堆内存),如果内存使用量不断增加,您仍然需要重新设计组件。

答案 1 :(得分:0)

简短的回答:这是不可能的。

只看到任务管理器,就没有足够的数据可用。内存泄漏通常是仍然分配的内存,但不再使用;然而,对于任务管理器来说,看起来该进程仍然会使用该内存(并且无法找到它)。您可能会注意到内存使用量不断增加,但这只是可能内存泄漏的指示 - 它也可能是程序真正使用该内存(或保留该内存以供将来使用) ,例如因为它使用自己的内存管理)。不使用其他工具,你无法知道。

答案 2 :(得分:0)

为了确认您对泄漏部件的怀疑,您可以以Perfmon内存分析为例 -

  

私有字节是内存量的合理近似值   您的可执行文件正在使用,可用于帮助缩小列表   内存泄漏的潜在候选人;如果你看到这个数字在增长   并且不断地和无休止地增长,你会想要检查   泄漏过程。然而,这不能证明存在或存在   不是泄密。

查看详情 - What is private bytes, virtual bytes, working set?