1

我们一直在使用 Vmmap、Processexplorer 和 MS Detours 来分析我们程序中的内存使用情况。我们的目标是验证我们程序的内存使用情况。例如,我们知道我们有 X MB 的数据从磁盘加载到内存中,我们希望确保我们不会以某种方式使用 2X MB 的内存来执行此操作。

但是,我们注意到以下差异: - 对于执行期间的特定点,Vmmap 将报告约 1310 MB 的私有工作集,而 Processexplorer 将报告约 1304 MB(仅减少 6MB,但哪个“更”准确......) - 使用 MS Detours 的内存跟踪将报告从 HeapAlloc 调用分配的 ~948 MB,但 Vmmap 会说程序正在使用 ~1143 MB 的私有堆

我的问题是,除非我们的跟踪代码中出现错误,并且内存被驱动程序映射,任何人都可以解释 Vmmap 和 Processexplorer 如何比我们的 MS Detours 钩子捕获更多的内存数据吗?

我们挂钩的其他值得注意的调用是: - VirtualAlloc - ZwAllocateVirtualMemory - RtlAllocateHeap - MapViewOfSection

提前谢谢了!

4

1 回答 1

1

它会建议在那个特定时间进行内存转储并在windbg中打开它并执行!address -summary。这个命令应该告诉你每个内存区域的状态。如果它是一个 .NET 应用程序,那么您可能需要深入研究 GC 堆。您可以参考文章http://vpnchoudhary.blogspot.com/2011/03/out-of-memory-exception-simple.html了解更多详情。

于 2011-04-03T20:02:43.017 回答