任何看过 Mark Russovich 演讲“揭示内存管理之谜”的人都知道,vmmap 工具可以向您显示与进程限制(普通 32 位 Windows 上为 2GB)相关的内容,而其他工具似乎很少了解这些内容。
我希望能够以编程方式监控我的real总内存大小(与进程限制密切相关的内存大小),因此我至少可以记录当接近进程限制时发生的情况。是否有任何关于 vmmap 如何执行此操作的公开信息?
...另外,为什么这些信息这么难获得?
我所知道的事情(据我所知)并不能完全告诉你全貌:
- ::GetProcessMemoryInfo 看起来只返回有关私有内存使用情况的信息
- System.Diagnostics.Process.VirtualMemorySize64 返回一个相当大的数字,但仍然与 vmmap 显示的总数不太匹配 - 事实上它与 vmmap 中显示的任何内容都不匹配:(
我用的是依赖步行者 http://www.dependencywalker.com/查看从哪些 Windows API 函数导入Kernel32.dll
by vmmap.exe
并发现以下可能相关的功能:
VirtualAlloc
VirtualAllocEx
VirtualFree
VirtualProtectEx
VirtualQueryEx
看看这些,看看你是否能找到什么vmmap
是在做。当然,任何其他动态进行的 API 调用(即通过LoadLibrary
) 不会出现在依赖遍历器中。众所周知,在处理并行加载的 DLL 时,它也会被破坏。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)