Получение информации о памяти
http://sadovoya.narod.ru
Для получения детальной информации о состоянии памяти компьютера можно воспользоваться функцией API GlobalMemoryStatus. В функцию передается переменная типа TMemoryStatus, которая представляет собой запись, тип которой определен следующим образом:
type TMemoryStatus = record dwLength: DWORD; dwMemoryLoad: DWORD; dwTotalPhys: DWORD; dwAvailPhys: DWORD; dwTotalPageFile: DWORD; dwAvailPageFile: DWORD; dwTotalVirtual: DWORD; dwAvailVirtual: DWORD; end;
Первое поле записи, dwLength, описывает длину записи TMemoryStatus. Поле необходимо инициализировать функцией SizeOf до обращения к функции GlobalMemoryStatus.
Второе поле, dwMemoryLoad, содержит количество использованной памяти в процентах.
Третье поле, dwTotalPhys, содержит число байт установленной на компьютере ОЗУ (физической памяти).
Поле dwAvailPhys - свободная физическая память в байтах.
Следующие два поля - dwTotalPageFile и dwAvailPageFile - показывают общий объем, который могут сохранить файлы/файл подкачки (вообще говоря, не совпадает с размером последних) и еще доступный объем из этой величины. Все в байтах.
Последние два поля относятся к виртуальной памяти. Поле dwTotalVirtual - общее число байтов виртуальной памяти, используемой в вызывающем процессе. Поле AvailVirtual - объем этой памяти, еще доступной для вызывающего процесса.
Приведу один пример использования функции GlobalMemoryStatus. На Дельфи можно реализовать следующий код получения информации о наличной памяти ОЗУ:
function GetRAM: Cardinal; var MS: TMemoryStatus; begin MS.dwLength:=SizeOf(MS); GlobalMemoryStatus(MS); Result:=MS.dwTotalPhys; end;
Функция GetRAM возвращает общее число байт физической памяти, установленной на компьютере. Эту информацию она читает из поля dwTotalPhys записи MS, имеющей тип TMemoryStatus. Перед этим вызывается API-функция GlobalMemoryStatus с параметром MS. Обратите внимание, что перед вызовом GlobalMemoryStatus инициализируется поле dwLength функцией SizeOf.
По аналогии с примером можно получить информацию об остальных параметрах памяти. Думаю, у читателей это не вызовет затруднения. Реализацию функций на Дельфи для получения информации о памяти можно найти в моем модуле SysInfo v.3.00 по адресу SysInfo2.zip. Там же содержатся функции получения и другой системной информации.
Оставить комментарий
Комментарии
DWORD dwLength;
DWORD dwMemoryLoad;
DWORDLONG ullTotalPhys;
DWORDLONG ullAvailPhys;
DWORDLONG ullTotalPageFile;
DWORDLONG ullAvailPageFile;
DWORDLONG ullTotalVirtual;
DWORDLONG ullAvailVirtual;
DWORDLONG ullAvailExtendedVirtual;
} MEMORYSTATUSEX, *LPMEMORYSTATUSEX;
Здесь DWORD - типичный Cardinal, а вот DWORDLONG - 64 битное беззнаковое целое. Вместо него можно использовать массив 8-ми байт. К сожалению Int64 не совсем годится - он знаковый и соответственно хранить может меньше положительных цифр, чем DWORDLONG. Впрочем, в обозримом будущем Int64 не перекроют производители железа. В Lazarus есть аналог DWORDLONG - это QWord. Может, я отстал от жизни, что-то и в Дельфи могло появиться. Сказанное относилось к TurboDelphi 2006.
С уважением, Автор.