VS2008|:任务管理器和CRT堆调试器函数之间的内存使用差异

VS2008|: Memory use discrepancy between Task Manager and CRT Heap Debugger functions

本文关键字:内存 之间 函数 调试器 任务管理器 CRT VS2008      更新时间:2023-10-16

我一直在使用各种_CRTMem*函数来尝试查找代码中的内存泄漏。该应用程序是一个非托管的c++应用程序。我注意到一些奇怪的事情:

  • 任务管理器(我使用它的"提交大小"度量)报告的内存使用增加与使用CRT堆调试器函数_CrtMemCheckpoint(), _CrtMemDifference()和_CrtMemDumpStatistics()报告的内存使用增加之间存在巨大差异。报告的内存使用增加是200KB(任务管理器)vs 17 KB (CRT堆调试器)。可能是windows在后台分配了额外的内存吗?这似乎是个巨大的差异。
  • 我一直在使用_crtdbg_map_alloc#定义和函数_CrtMemDumpAllObjectsSince()来获取内存泄漏文件位置。然而,大约75%的泄漏文件没有文件位置信息。这是否也表明在幕后发生了额外的分配?

我们使用Windows 7进行测试,但最终目标应用程序将在Windows CE下运行。WindowsCE有更好(或不同)的内存管理吗?

有人能帮忙吗?非常感谢,保罗

任务管理器曾经显示真实的数字,但自从Vista(我想)以来,他们改变了它,所以它会报告一个"简化"的报告。这对于严肃的工作是无用的,即使它足以让非技术用户了解他们的系统中发生了什么。

这里有一篇文章描述了一些变化。

如果您想测量内存,请使用perfmon,它带有许多内存计数器之一,或者是进程对象的内存计数器。这些将为您提供所需的原始数据。