2008-11-11 5 views

Odpowiedz

43

Dobrym punktem wyjścia będzie GetProcessMemoryInfo, który zgłasza różne informacje o pamięci dotyczące określonego procesu. Możesz przekazać GetCurrentProcess() jako uchwyt procesu, aby uzyskać informacje o procesie wywołującym.

Prawdopodobnie członek WorkingSetSize z PROCESS_MEMORY_COUNTERS jest najbliższy coulmnowi Mem Usage w menedżerze zadań, ale nie będzie dokładnie taki sam. Eksperymentowałem z różnymi wartościami, aby znaleźć ten, który jest najbliższy twoim potrzebom.

8

GetProcessMemoryInfo to funkcja, której szukasz. Dokumenty w witrynie MSDN wskażą Ci właściwy kierunek. Uzyskaj informacje, których potrzebujesz, ze struktury PROCESS_MEMORY_COUNTERS, którą przekazujesz.

Musisz załączyć psapi.h.

17

myślę, że to jest to, czego szukali:

#include<windows.h> 
#include<stdio.h> 
#include<tchar.h> 

// Use to convert bytes to MB 
#define DIV 1048576 

// Use to convert bytes to MB 
//#define DIV 1024 

// Specify the width of the field in which to print the numbers. 
// The asterisk in the format specifier "%*I64d" takes an integer 
// argument and uses it to pad and right justify the number. 

#define WIDTH 7 

void _tmain() 
{ 
    MEMORYSTATUSEX statex; 

    statex.dwLength = sizeof (statex); 

    GlobalMemoryStatusEx (&statex); 


    _tprintf (TEXT("There is %*ld percent of memory in use.\n"),WIDTH, statex.dwMemoryLoad); 
    _tprintf (TEXT("There are %*I64d total Mbytes of physical memory.\n"),WIDTH,statex.ullTotalPhys/DIV); 
    _tprintf (TEXT("There are %*I64d free Mbytes of physical memory.\n"),WIDTH, statex.ullAvailPhys/DIV); 
    _tprintf (TEXT("There are %*I64d total Mbytes of paging file.\n"),WIDTH, statex.ullTotalPageFile/DIV); 
    _tprintf (TEXT("There are %*I64d free Mbytes of paging file.\n"),WIDTH, statex.ullAvailPageFile/DIV); 
    _tprintf (TEXT("There are %*I64d total Mbytes of virtual memory.\n"),WIDTH, statex.ullTotalVirtual/DIV); 
    _tprintf (TEXT("There are %*I64d free Mbytes of virtual memory.\n"),WIDTH, statex.ullAvailVirtual/DIV); 
    _tprintf (TEXT("There are %*I64d free Mbytes of extended memory.\n"),WIDTH, statex.ullAvailExtendedVirtual/DIV); 


} 
+2

Prawdopodobnie nie jest to, co chciał wiedzieć, ponieważ ta pamięć systemowa jest używana, a nie pamięć zużywana przez pojedynczy proces. Jednak może się przydać, aby go poznać, więc nie będę go oceniać. – CashCow

+1

Źródło: http://msdn.microsoft.com/en-us/library/windows/desktop/aa366589%28v=vs.85%29.aspx – user956584

+0

Nie o to pyta, chociaż może być ogólnie przydatne. –

1

celu uzupełnienia odpowiedź przez Ronin, indead funkcję GlobalMemoryStatusEx daje odpowiednie liczniki do uzyskania użycie pamięci wirtualnej dla procesu wywołującego: tylko odejmowanie ullAvailVirtual z ullTotalVirtual, aby uzyskać przydzieloną pamięć wirtualną. Możesz to sprawdzić dla siebie używając ProcessExplorer lub czegoś podobnego.

To mylące, że wywołanie systemowe GlobalMemoryStatusEx ma niestety cel mieszany: zapewnia zarówno informacje systemowe, jak i dotyczące procesu, np. informacje o pamięci wirtualnej.