我一直在使用各种 _CRTMem* 函数来尝试定位我们代码中的内存泄漏。该应用程序是非托管 C++ 应用程序。我注意到一些奇怪的事情:
- 任务管理器报告的内存使用增加(我使用其“提交大小”指标)与使用 CRT 堆调试器函数 _CrtMemCheckpoint()、_CrtMemDifference() 和 _CrtMemDumpStatistics() 报告的内存使用增加之间存在巨大差异。报告的内存使用增加为 200KB(任务管理器)与 17KB(CRT 堆调试器)。难道是windows在后台分配了额外的内存?这似乎是一个巨大的差异。
- 我一直在使用 _CRTDBG_MAP_ALLOC #define 和函数 _CrtMemDumpAllObjectsSince() 来获取内存泄漏文件的位置。但是,大约 75% 的泄漏没有可用的文件位置信息。这是否也表明在幕后发生了额外的分配。
我们使用 Windows 7 进行测试,但最终目标应用程序将在 Windows CE 下运行。WindowsCE 是否有更好(或不同)的内存管理?
任何人都可以帮忙吗?非常感谢,保罗