Доступ к отображаемой памяти 151

Тип TIndexBond

Объявление: type TIndexBond = array [l-.MaxInt div 4, 1..2] of Longint;

Функция: Используется /у\я передачи конструктору TEMSArray.Init списка

граничных пар многомерного массива. См. примечание к TIndex.

Тип TIndexList Объявление: type TIndexList = array [l.-MaxInt div 2] of Longint;

функция; Используется для указания списка индексов многомерного массива

при обращении к методам объекта TEMSAnay. См. примечание к TIndex.

5.3.3. Тестовая программа

В следующей программе демонстрируются основные приемы работы с объектами и подпрограммами модуля F_EMS.

Работа программы заключается в выполнении нескольких тестов. Вначале с помощью функции IsEMS определяется доступность EMS— памяти: если функция возвращает False, выводится сообщение

Нет ЕМЗ-памяти. или не установлен EMM

и программа завершает работу. Если память доступна, сообщается общий объем памяти в страницах и количество свободных EMS— страниц.

Второй тест заключается в сопоставлении скорости доступа к стандартной и EMS— памяти. Для этого в куче создается несколько массивов длинных целых чисел по 16 Кбайт каждый, которые заполняются последовательно возрастающими значениями, после чего подсчитывается сумма всех элементов всех массивов. На экран выводится контрольная сумма и время, затраченное на работу. Затем создается объект TEMSVector такой же длины, как суммарная длина всех массивов в куче, его элементы заполняются монотонно возрастающими значениями, после чего подсчитывается контрольная сумма массива. Эта сумма и время счета также выводятся на экран. Разбивка на массивы по 16 Кбайт сделана, с одной стороны, чтобы приблизительно уравнять условия теста, а с другой, — это неизбежное следствие известного ограничения Турбо Паскаля: за одно обращение к менеджеру кучи нельзя зарезервировать больше 65521 байта. Этот тест показывает, что доступ к элементам EMS— массива идет в 5...10 раз медленнее, чем к массивам в стандартной памяти.

Следующий тест сохраняет созданный объект TEMSVector на диске, затем уничтожает объект и создает его вновь с помощью конструктора Load, после чего еще раз подсчитывает и выводит контрольную сумму массива.

В ходе выполнения четвертого теста создается объект TEMSText и в него считывается исходный текст тестовой программы. Затем средствами модуля F_Text на экране создается окно, в которое выводится эталонный текст программы, считанный непосредственно из PAS—файла, и текст, полученный из объекта. Если объект функционирует нормально, обе колонки окна должны содержать идентичные строки,