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:

PoleOpis
dwLengthOkreśla rozmiar struktury - wartość tego pola powinna zostać przypisana przed wywołaniem funkcji GlobalMemoryStatus
dwMemoryLoadProcentowe zużycie pamięci
dwTotalPhysIlość pamięci RAM (w bajtach)
dwAvailPhysIlość dostępnej pamięci RAM (w bajtach)
dwTotalPageFileOkreśla ilość bajtów, które mogą być umieszczeone w pliku stron
dwAvailPageFileIlość wolnej pamięci w pliku stron
dwTotalVirtualCałkowita pamięć wirtualna
dwAvailVirtualWolna 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;
FAQ

0 komentarzy