【发布时间】:2010-10-17 07:29:40
【问题描述】:
我有一个 c++ windows 应用程序,每个事务都会泄漏内存。使用 perfmon,我可以看到每个事务的私有字节数都在增加,当应用程序空闲时,内存使用量是平稳的。
按照之前关于 stackoverflow 的答案,我使用了微软调试工具中的 umdh 来追踪一个内存泄漏。但是仍然存在更多泄漏,并且 umdh 的结果与我的 perfmon 结果不匹配。
第一个 umdh 仍然报告此泄漏,堆栈跟踪是:
+ 36192 ( 2082056 - 2045864) 251 allocs BackTraceCB
+ 4 ( 251 - 247) BackTraceCB allocations
ntdll!RtlAllocateHeapSlowly+00000041
ntdll!RtlAllocateHeap+00000E9F
MSVCR80!malloc+0000007A
这没有用,因为第一个调用是 malloc,它没有说明调用它的内容。我对这种泄漏表示怀疑,因为它在应用程序正在处理事务和空闲时都会报告。但是我可以清楚地看到空闲时没有内存泄漏。并且在处理事务时报告的内存泄漏与作为 perfmon 报告处理的事务不成比例。
umhd 没有显示任何其他泄漏,尽管我知道至少还有一个未显示。我刚刚从网上搜索得知一个 Windows 应用程序可以有多个堆。
- 难道 umhd 只报告这些堆之一的内存使用情况?例如默认或crt 堆?
- 如何跟踪其他堆中的内存使用情况?
- 如何找出哪些 dll/模块正在使用其他堆?
由于我的选项不多了,我们将不胜感激地收到任何关于追踪此问题的指针。
【问题讨论】:
标签: c++ memory-leaks