我们一直在使用Vmmap,Processexplorer和MS Detours来分析程序中的内存使用情况。 我们的目标是验证程序的内存使用情况。 例如,我们知道我们有X MB的数据从磁盘加载到内存中,我们希望确保我们不会以某种方式使用2X MB的内存来执行此操作。
但是,我们注意到以下差异: - 对于执行期间的特定点,Vmmap将报告约1310 MB的私有工作集,其中Processexplorer将报告~1304 MB(仅6 MB关闭,但哪一个“更”准确...) - 使用MS Detours进行内存跟踪将报告从HeapAlloc调用分配的~948 MB,但Vmmap会说程序正在使用~1143 MB的私有堆
我的问题是, 除了我们的跟踪代码中的错误和驱动程序映射的内存之外,任何人都可以解释Vmmap和Processexplorer如何捕获比MS Detours挂钩更多的内存数据吗?
我们所关注的其他值得注意的电话是: - VirtualAlloc - ZwAllocateVirtualMemory - RtlAllocateHeap - MapViewOfSection
非常感谢提前!
答案 0 :(得分:1)
它会建议在特定时间进行内存转储并在windbg中打开它并执行!address -summary。此命令应告诉您每个内存区域的状态。 如果它是一个.NET应用程序,那么你可能想要深入研究GC堆。您可以参考文章http://vpnchoudhary.blogspot.com/2011/03/out-of-memory-exception-simple.html了解更多详情。