Листинг 7.6.
Определение состояния памяти
procedure TForm1.LoadMemoryInfo();
var
memStat: TMemoryStatus;
begin
memStat.dwLength := SizeOf(memStat);
//Получение информации о загрузке памяти
GlobalMemoryStatus(memStat);
//Заполнение полей формы
//..% использования памяти
pbMemUsage.Position := memStat.dwMemoryLoad;
lblMemUsage.Caption := IntToStr(memStat.dwMemoryLoad) + \'%\
//..использование оперативной памяти
txtMemTotal.Text := IntToStr(memStat.dwTotalPhys div 1024);
txtMemAvail.Text := InttoStr(memStat.dwAvailPhys div 1024);
//..использование файла подкачки
txtPageTotal.Text := IntToStr(memStat.dwTotalPageFile div 1024);
txtPageAvail.Text := InttoStr(memStat.dwAvailPageFile div 1024);
//..использование виртуальной памяти
txtVirtualTotal.Text := IntToStr(memStat.dwTotalVirtual div 1024);
txtVirtualAvail.Text := InttoStr(memStat.dwAvailVirtual div 1024);
end;
Внешний вид формы, элементы управления которой заполняются значениями в листинге 7.6, показан на рис. 7.3.
Рис. 7.3. Программа для определения состояния памяти компьютера
Напоследок рассмотрим (несколько упрощенно), что за результаты выводятся в текстовых полях формы, для тех, кто немного не в курсе, как организовано управление памятью в ОС Windows.
Итак, каждому процессу Windows предоставляет адресное пространство (виртуальное) размером чуть меньше 2 Гбайт. В отличие от 16-битных предшественниц, в 32-битных Windows адресные пространства различных процессов являются закрытыми: приложение использует память (а точнее, младшие 2 Гбайт адресного пространства) единолично и не может без дополнительных усилий манипулировать данными других процессов. Значения в двух последних полях CTpyKTypbiTMemoryStatus (и нижняя группа текстовых полей на форме рис. 7.3) как раз и показывают использование приложением предоставляемого ему адресного пространства.
Механизм виртуальной памяти является довольно удобной надстройкой, скрывающей ограниченность аппаратных ресурсов компьютера. Ограниченный объем оперативной памяти компенсируется использованием места на диске (файла подкачки, страничного файла). В этот файл записываются для временного хранения неиспользуемые страницы памяти (блоки данных по несколько Кбайт), давая возможность помещать другие данные, нужные приложению, в оперативную память.
Теперь вернемся к форме, показанной на рис. 7.3. Группа текстовых полей Оперативная память показывает полный и свободный объем реально установленной на компьютере оперативной памяти (за вычетом памяти, используемой для системных нужд). Использование этого вида памяти иллюстрирует индикаторРгодгезБВаг на форме. Назначение правой группы текстовых полей (Файл подкачки) должно быть также очевидным.
Из цифр, выведенных в текстовые поля на форме (рис. 7.3), можно также определить, что общий объем памяти, доступной приложениям (всего было запущено 30 процессов), на испытуемом компьютере составлял около 1,26 Гбайт. Если представить, что память использовалась всеми процессами одинаково, то получается примерно 43 Мбайт на каждого, не считая памяти, резервируемой для самой ОС Windows.