虚拟内存的实际应用

Shi*_*bli 5 memory virtual

我用过了代码

MEMORYSTATUSEX memInfo;
memInfo.dwLength = sizeof(MEMORYSTATUSEX);
GlobalMemoryStatusEx(&memInfo);
DWORDLONG totalVirtualMem = memInfo.ullTotalPageFile;
DWORDLONG virtualMemUsed = memInfo.ullTotalPageFile - memInfo.ullAvailPageFile;
DWORDLONG totalPhysMem = memInfo.ullTotalPhys;
Run Code Online (Sandbox Code Playgroud)

这里提供

输出如下:2.3GB.

totalVirtualMem = 8.5 Gb
virtualMemUsed  = 2.3 Gb
totalPhysMem    = 4   Gb
Run Code Online (Sandbox Code Playgroud)

这是否意味着我的程序需要2.3Gb的内存?你还可以评论总虚拟内存和RAM吗?我也无法运行此代码:

PROCESS_MEMORY_COUNTERS_EX pmc;
GetProcessMemoryInfo(GetCurrentProcess(), &pmc, sizeof(pmc));
SIZE_T virtualMemUsedByMe = pmc.PrivateUsage;
Run Code Online (Sandbox Code Playgroud)

因为它给出了错误,

error C2664: 'GetProcessMemoryInfo' : cannot convert parameter 2 from 'PROCESS_MEMORY_COUNTERS_EX *' to 'PPROCESS_MEMORY_COUNTERS'
Run Code Online (Sandbox Code Playgroud)

Con*_*tin 6

我偶然发现了完全相同的问题,并发现一个简单的类型转换为我解决了它.

PROCESS_MEMORY_COUNTERS_EX pmc;
GetProcessMemoryInfo(GetCurrentProcess(), (PROCESS_MEMORY_COUNTERS*)&pmc, sizeof(pmc));
SIZE_T virtualMemUsedByMe = pmc.PrivateUsage;
Run Code Online (Sandbox Code Playgroud)

这里也描述解决方案(msdn:关于GetProcessMemoryInfo的问题).