Практическое использование виртуальной памяти - PullRequest
5 голосов
/ 11 января 2012

Я использовал код

MEMORYSTATUSEX memInfo;
memInfo.dwLength = sizeof(MEMORYSTATUSEX);
GlobalMemoryStatusEx(&memInfo);
DWORDLONG totalVirtualMem = memInfo.ullTotalPageFile;
DWORDLONG virtualMemUsed = memInfo.ullTotalPageFile - memInfo.ullAvailPageFile;
DWORDLONG totalPhysMem = memInfo.ullTotalPhys;

, предоставленный на здесь

Вывод: 2,3 ГБ.

totalVirtualMem = 8.5 Gb
virtualMemUsed  = 2.3 Gb
totalPhysMem    = 4   Gb

Значит ли это, что моей программе требуется 2,3 ГБ памяти?Не могли бы вы также прокомментировать общий объем виртуальной памяти и оперативной памяти?Также я не смог запустить этот код:

PROCESS_MEMORY_COUNTERS_EX pmc;
GetProcessMemoryInfo(GetCurrentProcess(), &pmc, sizeof(pmc));
SIZE_T virtualMemUsedByMe = pmc.PrivateUsage;

, поскольку он выдает ошибку как,

error C2664: 'GetProcessMemoryInfo' : cannot convert parameter 2 from 'PROCESS_MEMORY_COUNTERS_EX *' to 'PPROCESS_MEMORY_COUNTERS'

1 Ответ

6 голосов
/ 21 ноября 2012

Я наткнулся на точно такую ​​же проблему и обнаружил, что решение для простого типа решило ее для меня.

PROCESS_MEMORY_COUNTERS_EX pmc;
GetProcessMemoryInfo(GetCurrentProcess(), (PROCESS_MEMORY_COUNTERS*)&pmc, sizeof(pmc));
SIZE_T virtualMemUsedByMe = pmc.PrivateUsage;

Здесь также описано решение (msdn: Вопрос о GetProcessMemoryInfo) .

...