Доступ к отображаемой памяти 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—файла, и текст, полученный из объекта. Если объект функционирует нормально, обе колонки окна должны содержать идентичные строки,