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

时间:2013-05-27 11:44:38

标签: c++ windows memory

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

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

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

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

1 个答案:

答案 0 :(得分:2)

任务管理器过去常常向您显示实际数字,但自从Vista(我认为)后,他们对其进行了更改,以便报告“简化”报告。即使非技术用户足以了解他们系统中发生的事情,这对于认真工作也没用。

这里描述了一些变化的an article

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