Jak pobrać ilość dostępnej pamięci systemu
Adam Boduch
W celu pobrania informacji na temat dostępnej oraz całkowitej pamięci RAM, czy pamięci wirtualnej, należy skorzystać z funkcji WinAPI - GlobalMemoryStatus. Jej deklaracja zapisana w języku C/C++ przedstawia się następująco:
VOID GlobalMemoryStatus(
LPMEMORYSTATUS lpBuffer
);
Jedynym parametrem tej funkcji jest rekord, którego deklaracja w języku C wygląda tak:
typedef struct _MEMORYSTATUS {
DWORD dwLength;
DWORD dwMemoryLoad;
DWORD dwTotalPhys;
DWORD dwAvailPhys;
DWORD dwTotalPageFile;
DWORD dwAvailPageFile;
DWORD dwTotalVirtual;
DWORD dwAvailVirtual;
} MEMORYSTATUS, *LPMEMORYSTATUS;
Znaczenie tych pól jest następujące:
Pole | Opis |
---|---|
dwLength | Określa rozmiar struktury - wartość tego pola powinna zostać przypisana przed wywołaniem funkcji GlobalMemoryStatus |
dwMemoryLoad | Procentowe zużycie pamięci |
dwTotalPhys | Ilość pamięci RAM (w bajtach) |
dwAvailPhys | Ilość dostępnej pamięci RAM (w bajtach) |
dwTotalPageFile | Określa ilość bajtów, które mogą być umieszczeone w pliku stron |
dwAvailPageFile | Ilość wolnej pamięci w pliku stron |
dwTotalVirtual | Całkowita pamięć wirtualna |
dwAvailVirtual | Wolna pamięć wirtualna |
Oto przykład użycia tej funkcji:
procedure TForm1.Button1Click(Sender: TObject);
var Memory : TMemoryStatus;
begin
Memory.dwLength := SizeOf(Memory);
GlobalMemoryStatus(Memory);
with Memo1.Lines do
begin
Add(FloatToStr(Memory.dwMemoryLoad) + '% używanej pamięci');
Add(FloatToStr(Memory.dwTotalPhys / 1024) + ' kB całkowitej pamięci');
Add(FloatToStr(Memory.dwAvailPhys / 1024) + ' kB dostępnej pamięci');
Add(FloatToStr(Memory.dwTotalPageFile / 1024) + ' kB może być umieszczone w pliku stron');
Add(FloatToStr(Memory.dwAvailPageFile / 1024) + ' kB dostępnej pamięci pliku stron');
Add(FloatToStr(Memory.dwTotalVirtual / 1024) + ' kB całkowitej pamięci wirtualnej');
Add(FloatToSTr(Memory.dwAvailVirtual / 1024) + ' kB dostępnej pamięci wirtualnej');
end;
end;