正如任何看过Mark Russovich谈话“内存管理揭示的奥秘”的人所知道的,VMMAP工具可以向你展示一些与你的进程限制相关的东西(在香草32位Windows上的2GB),这是很少有其他工具知道的。
我希望能够以编程方式监视我真正的总内存大小(一个与进程限制很接近的),这样我至少可以记录当我接近进程限制时发生了什么。有没有关于vmmap如何做到这一点的公开信息?
…还有,为什么这些信息这么难得到??
我所知道的事情(afaik)并不能让你完全了解:
●getprocessmemoryinfo似乎只返回有关专用内存使用情况的信息
system.diagnostics.process.virtualMemorySize64返回一个相当大的数字,但仍然与vmmap显示的总数不完全匹配--事实上,它与vmmap中显示的任何内容都不匹配:(
最佳答案
我使用Dependency Walker查看由Kernel32.dll
从vmmap.exe
导入的windows api函数,发现以下函数可能与此相关:
VirtualAlloc
VirtualAllocEx
VirtualFree
VirtualProtectEx
VirtualQueryEx
看看这些,看看你是否能找到
vmmap
正在做什么。当然,任何其他动态进行的api调用(即viaLoadLibrary
)都不会显示在依赖项walker中。它也被认为是打破时,处理旁边的加载dll。