2012-01-11 5 views
5

Я использовал кодПрактического использования виртуальной памяти

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

, предусмотренный на here

выхода, как: 2.3GB.

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' 

ответ

6

я наткнулся на точно такую ​​же проблему и выяснили, что простой тип броска решил это для меня.

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

Решение также описано here (msdn: Question about GetProcessMemoryInfo).

Смежные вопросы