这两个页面:Windows - Commit Size vs Virtual Size和what'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”一词。
答案 0 :(得分:0)
您需要将NtQueryInformationProcess
与ProcessVmCounters
信息类一起使用。
得到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))
{
}