如何在Windows下检查程序的提交大小

时间:2017-02-24 19:24:29

标签: winapi memory memory-management

这两个页​​面:Windows - Commit Size vs Virtual Sizewhat's the difference between working set and commit size?可以很好地解释程序的提交大小。但是,我正在查看Process Explorer中的一个程序,来自https://syncthing.net/的Syncthing.exe并看到让我感到好奇的东西。

根据Process Explorer,虚拟大小介于34到35 Gb之间。然而我的页面文件大小只有15.5 Gb。因此,该程序中必须至少有19 Gb,它们是虚拟地图的一部分,但尚未提交。

我可以调用哪些Win32 API来确定程序的实际提交大小?或者有没有办法从Process Explorer中获取此信息,因为“选择列”对话框的“进程内存”选项卡上的所有选项都没有在其中包含“commit”一词。

1 个答案:

答案 0 :(得分:0)

您需要将NtQueryInformationProcessProcessVmCounters信息类一起使用。

退出时

得到VM_COUNTERS结构 - 查看ntddk.h(来自Windows WDK)的定义。

typedef struct _VM_COUNTERS {
    SIZE_T PeakVirtualSize;
    SIZE_T VirtualSize;
    ULONG PageFaultCount;
    SIZE_T PeakWorkingSetSize;
    SIZE_T WorkingSetSize;
    SIZE_T QuotaPeakPagedPoolUsage;
    SIZE_T QuotaPagedPoolUsage;
    SIZE_T QuotaPeakNonPagedPoolUsage;
    SIZE_T QuotaNonPagedPoolUsage;
    SIZE_T PagefileUsage;
    SIZE_T PeakPagefileUsage;
} VM_COUNTERS;

您也可以使用VM_COUNTERS_EX代替VM_COUNTERS - 内核通过检查输出缓冲区大小来了解您请求的结构。典型用法示例:

HANDLE hProcess;
VM_COUNTERS_EX vmc;
if (0 <= ZwQueryInformationProcess(hProcess, ProcessVmCounters, &vmc, sizeof(vmc), 0))
{
}