Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Turbo Pascal / Stud_1_1 / LecRus / MainPart.doc
Скачиваний:
116
Добавлен:
03.03.2016
Размер:
5.03 Mб
Скачать

Оверлейная структура программы

Как уже ранее отмечалось, максимальный размер модуля не может превышать 64 Кбайт, однако количество модулей в программе не ограничивается. Это дает возможность создавать программы, занимающие весь доступный объем оперативной памяти ПЭВМ. В ряде случаев для больших программ этого объема также недостаточно. Тогда программист может использовать механизм оверлеев, позволяющий создавать программы практически неограниченного объема.

Оверлеи представляют собой части программы, которые размещаются в отдельном файле дисковой памяти и в процессе работы программы совместно используют общую область оперативной памяти. В один и тот же момент времени в памяти размещается одна или несколько оверлейных частей программы, а в процессе ее выполнения происходит смена оверлеев. Оверлейные части Паскаль-программы оформляются как отдельные модули.

Предположим, что программа состоит из основной части Main и трех модулей A, B и С, при этом их объем составляет соответственно и . Без использования оверлеев для размещения программы требуется байт. Структура такой программы имеет следующий вид:

M a i n

A

B

C

С использованием оверлеев получим такую структуру:

Для размещения такой программы требуется байт памяти.

В многомодульной программе содержится основная программа (Program), резидентные (неоверлейные) и оверлейные модули. При компиляции такой программы создаются два файла: исполнимый файл с расширением exe и оверлейный с расширением ovr. При загрузке оверлеев в память они размещаются в оверлейном буфере, расположенном между сегментом стека и динамически распределяемой областью памяти. Размер этого буфера по умолчанию принимается равным размеру наибольшего оверлейного модуля.

Управление оверлеями реализуется в Турбо Паскале с помощью стандартного модуля Overlay. При этом в программе пользователя должны быть выполнены следующие требования.

1. Все оверлейные модули должны компилироваться с директивами {$O+, F+}.

Директива {$O+, F+} означает, что данный модуль может быть использован как оверлейный. В связи с этим в программе, имеющей оверлейную структуру, обычно для всех модулей устанавливают такую директиву.

2. В основной программе после предложения Uses следует в директивах {$O Имя_файла} перечислить имена оверлейных модулей.

3. В основной программе в предложении Uses имя стандартного модуля Overlay должно быть первым.

Инициализация оверлейного файла выполняется процедурой

OvrInit(Имя_файла:string),

в которой указывается имя файла с расширением ovr.

Код результата инициализации сохраняется в предописанной переменной OvrResult, которая при успешном завершении работы процедуры OvrInit принимает значение 0.

С помощью функции

OvrGetBuf : longint

можно получить значение размера оверлейного буфера (в байтах).

С помощью процедуры

OvrSetBuf(OvrSize:longint)

это значение можно увеличить.

Пример.

{$O+,F+}

Program OverDemo;

Uses Overlay,Crt,Unit1,Unit2;

{$O Unit1}

{$O Unit2}

Begin

OvrInit('OverDemo.ovr');

If OvrResult<>0 then

Begin

Writeln(#7'Оверлейный файл не найден');

Halt

End;

Proc1;

Proc2;

End.

{O+,F+}

Unit Unit1;

Соседние файлы в папке LecRus