0

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

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

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

任何人都可以帮忙吗?非常感谢,保罗

4

1 回答 1

2

任务管理器曾经向您显示真实数字,但自从 Vista(我认为)他们改变了它,所以它会报告一个“简化”的报告。这对于严肃的工作是没有用的,即使非技术用户足以了解他们系统中发生的事情。

是一篇描述一些变化的文章。

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

于 2013-05-27T13:29:05.107 回答