我有一个C ++ Windows应用程序,每个事务都会泄漏内存。使用perfmon,我可以看到每个事务的专用字节都增加了,而应用程序空闲时内存使用率却是稳定的。
按照先前关于stackoverflow的答案,我使用了Microsoft调试工具中的umdh来跟踪一次内存泄漏。但是仍然有更多的泄漏,并且umdh的结果与我的性能结果不符。
First umdh仍然报告此泄漏,堆栈跟踪为:
+ 36192 ( 2082056 - 2045864) 251 allocs BackTraceCB + 4 ( 251 - 247) BackTraceCB allocations ntdll!RtlAllocateHeapSlowly+00000041 ntdll!RtlAllocateHeap+00000E9F MSVCR80!malloc+0000007A
这是没有用的,因为第一个调用是malloc,没有说什么叫它。我对这种泄漏感到怀疑,因为在应用程序正在处理事务和空闲时都会报告该泄漏。但是我可以清楚地看到空闲时没有内存泄漏。并且在处理事务时报告的内存泄漏与作为性能报告处理的事务不成比例。
umhd没有显示任何其他泄漏,尽管我知道至少还有一个未显示。我刚刚从网上搜索中学到Windows应用程序可以有多个堆。
可能是umhd仅报告了其中一个堆的内存使用情况吗?例如默认堆或crt堆?
如何跟踪其他堆中的内存使用情况?
以及如何找出哪些dll /模块正在使用其他堆?
当我用尽所有选项时,将不胜感激地收到任何跟踪此问题的指针。