Próbuję dowiedzieć się, ile pamięci aplikacja zużywa w samym programie. Wykorzystanie pamięci, którego szukam, to numer podany w kolumnie "Użycie pamięci" na karcie Procesy w Menedżerze zadań systemu Windows.Jak uzyskać wykorzystanie pamięci w systemie Windows w C++
Odpowiedz
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.
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.
Spróbuj spojrzeć na GetProcessMemoryInfo. Nie użyłem go, ale wygląda na to, czego potrzebujesz.
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);
}
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.
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
Źródło: http://msdn.microsoft.com/en-us/library/windows/desktop/aa366589%28v=vs.85%29.aspx – user956584
Nie o to pyta, chociaż może być ogólnie przydatne. –