草庐IT

windows - 如何以编程方式获取 vmmap 中显示的信息?

任何看过MarkRussovich演讲“揭开内存管理之谜”的人都知道,vmmap工具可以向您展示一些其他工具似乎不知道的与您的进程限制(在vanilla32位窗口上为2GB)有关的事情.我希望能够以编程方式监控我的真实总内存大小(与进程限制密切相关的内存大小),这样我至少可以记录接近进程限制时发生的情况。是否有关于vmmap如何执行此操作的公开信息?...还有,为什么这个信息这么难得到??我所知道的事情(AFAIK)并不能完全给你全貌:::GetProcessMemoryInfo看起来它只返回有关私有(private)内存使用情况的信息System.Diagnostics.Proces

c# - "Private Data"在 VMMAP 中定义了什么?

我正在使用VMMap来分析混合模式(托管和非托管)应用程序中的虚拟/进程地址空间利用率。我了解WindowsVMM和虚拟内存API的工作原理,我也了解堆内存API的工作原理。我查看了我正在使用的CRT实现(不是很详细)并且(我认为我-这可能是我的失败)了解它如何使用上述Win32API。我想了解这个“私有(private)数据”统计数据向我展示了什么。我的应用程序没有直接调用任何Win32内存API函数,它只使用nativeC++中的“malloc/new”和C#中的“new”(在深处将使用Win32内存管理API)。VMMap给出的“私有(private)数据”的定义是:Privat

windows - VMMap 如何知道给定的内存区域是线程堆栈,具体来说?

我一直在使用MarkRussinovich的VMMap来绘制我正在分析的进程的虚拟内存。使用VirtualQueryEx,我可以遍历外部进程的空间并获取有关进程地址空间内的内存区域的信息。当然,这些区域与VMMap匹配,但VirtualQueryEx只告诉我内存是否已提交/保留/免费以及它是否是私有(private)/共享/镜像。我找不到任何其他记录在案的方法来查询进程虚拟内存。VMMap似乎知道一种查询内存的方法,以了解它是“私有(private)数据”还是“线程堆栈”。VirtualQueryEx将这两个标签都标记为MEM_PRIVATE。那么VMMap是如何做出这种区分的呢?我可