Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Последние темы форума

Показать новые сообщения »

Почтовая рассылка

Подписчиков: 11631
Последний выпуск: 19.06.2015

Получение информации о памяти

Автор: Андрей Садовый
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. Там же содержатся функции получения и другой системной информации.

Оставить комментарий

Комментарий:
можно использовать BB-коды
Максимальная длина комментария - 4000 символов.
 

Комментарии

1.
289
19 ноября 2005 года
sadovoya
757 / / 19.11.2005
Мне нравитсяМне не нравится
24 февраля 2015, 20:27:59
Обновления модуля SysInfo для Delphi и Lazarus можно найти на странице http://sadovoya.narod.ru/codes.htm либо в исходниках в этом форуме. Там-же есть на тему системной информации на C++ ("чистом" и с использованием Qt).
2.
289
19 ноября 2005 года
sadovoya
757 / / 19.11.2005
Мне нравитсяМне не нравится
10 апреля 2011, 01:10:42
Структура TMemoryStatus и функция (точнее процедура) GlobalMemoryStatus на данный момент устарели. Сейчас их заменили MEMORYSTATUSEX и GlobalMemoryStatusEx. Все с ними аналогично, просто новая структура имеет более мощные поля, позволяющие хранить большие цифры. В MSDN на C++ она определена так:

Код:
typedef struct _MEMORYSTATUSEX {

  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.
3.
Аноним
Мне нравитсяМне не нравится
23 января 2006, 19:46:19
Название ссылки на программу не верное, хотя сама ссылка правильная. Модуль SysInfo v.3.00 можно еще найти на моем сайте http://sadovoya.narod.ru.
С уважением, Автор.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог