- •Содержание
- •Раздел 1.Подпрограммы Общие сведения
- •Процедуры Описание процедур
- •Вызов процедур
- •Процедуры без параметров
- •Процедуры с параметрами
- •Параметры-значения
- •Параметры-переменные
- •Параметры-константы
- •Параметры-переменные без типа
- •Параметры процедурного типа
- •Использование производных типов в качестве параметров подпрограмм
- •Принцип локализации имен
- •Функции Описание функций
- •Вызов функции
- •Рекурсивные подпрограммы
- •Директивы
- •Библиотечные модули пользователя Общие сведения
- •Структура модуля Unit
- •Особенности работы с модулями
- •Подключение к программе внешнего файла
- •Раздел 2.Простейший ввод-вывод Процедуры ввода из стандартного текстового файла Input
- •248 15 4 70 Значения 1-й строки
- •11 Значения 2-й строки
- •Процедуры вывода в стандартный текстовый файл Output
- •Раздел 3.Записи Структура записи
- •Записи без вариантной части
- •Записи с вариантами
- •Оператор присоединения With
- •Константа-запись
- •Раздел 4.Множества Общие сведения
- •Конструктор множества
- •Задание множественного типа
- •Операции над множествами
- •Ввод / вывод значения множественной переменной
- •Типизованные константы-множества
- •Раздел 5.Файлы Общие сведения
- •Процедура Assign
- •Файлы с типом
- •Процедура Assign
- •Процедура Rewrite (f)
- •Процедура Write (f, v1 [, v2, … , vn])
- •Процедура Reset (f)
- •Процедура Read (f, V [, v2, …, vn])
- •Функция Eof(f)
- •Процедура Seek (f, n)
- •Функция Filepos (f)
- •Функция Filesize(f)
- •Процедура Close (f)
- •Текстовые файлы
- •Процедура Assign (f, Name)
- •Процедура AssignСrt(f)
- •Процедура Append (f)
- •Процедура Rewrite (f)
- •Процедура Reset (f)
- •Процедура Read ([f,] v1 [, v2, …, vn])
- •Процедура Readln [([f] [,] [v1, v2, …, vn])]
- •Процедура Write ([f,] e1 [, e2, …, en])
- •Процедура Writeln([f,][e1,e2, …,en])
- •Процедура Close(f)
- •Процедура SetTextBuf (f, Buf [, Size])
- •Процедура Flush (f)
- •Сравнительная характеристика представления информации в файлах с типом и текстовых файлах
- •I. Представление числовой информации.
- •II. Представление текстовой информации.
- •Файлы без типа
- •Процедуры Reset и Rewrite
- •Процедура Blockread
- •Процедура Blockwrite
- •Проверка операций ввода-вывода
- •Раздел 6.Ссылочный тип (тип указатель) Общие сведения
- •Методы работы с динамическими переменными
- •Процедуры New и Dispose
- •Процедуры Getmem и Freemem
- •Процедуры Mark и Release
- •Раздел 7.Динамические структуры данных Динамические цепочки Структура динамической цепочки
- •Формирование цепочки
- •Поиск элемента в цепочке
- •Удаление элемента из цепочки
- •Вставка элемента в цепочку
- •Линейный однонаправленный список
- •Двунаправленные списки
- •Вставка элемента
- •Создание двунаправленного кольцевого списка с заглавным звеном
- •Удаление элемента
- •Поиск элемента
- •Очереди и стеки
- •Очередь lifo
- •Очередь fifo
- •Общие сведения
- •Способы организации таблиц
- •Однонаправленный список.
- •Однонаправленный список с упорядоченными записями.
- •Однонаправленный список с отдельным хранением текста записи.
- •Представление в виде массива.
- •Двоичное дерево.
- •Двоичные деревья Структура двоичного дерева
- •Построение дерева
- •Поиск записи в дереве
- •Включение записи в дерево
- •Удаление записи из дерева
- •Раздел 8.Оверлеи Общие сведения
- •Правила оформления оверлейных программ
- •Инициализация работы оверлеев
- •Включение администратора оверлеев
- •Обработка ошибок администратора
- •Размещение оверлейного файла в ems-памяти
- •Управление оверлейным буфером
- •Литература Основная и дополнительная литература
- •Перечень наглядных пособий, методических указаний, методических материалов и используемых в учебном процессе технических средств
Раздел 8.Оверлеи Общие сведения
После компиляции программы может оказаться, что она слишком большая. В этом случае при запуске программы выдается сообщение типа «Не хватает памяти». Один из выходов в данной ситуации – использование оверлейной технологии составления программ.
Модуль Overlay – средство для разбиения программы на отдельные части. Суммарный объем этих частей может значительно превышать объем доступной памяти компьютера.
Оверлейная программа состоит из двух частей – файла с расширением ехе и файла с тем же именем, но с расширением ovr. Ехе-файл содержит постоянную часть программы. Оvr-файл хранит части программы, которые подгружаются в память по мере необходимости. При этом в памяти находятся лишь необходимые в данный момент процедуры и функции. Затем они перекрываются другими оверлейными процедурами и функциями. Оверлейные части программы по очереди ипользуют одну и ту же область памяти. Она называется оверлейным буфером.
Действия по загрузке или выгрузке оверлеев из памяти выполняются автоматически администратором оверлеев.
Правила оформления оверлейных программ
Паскаль позволяет создавать оверлеи только на уровне модулей, Таким образом, минимальной оверлейной единицей является модуль Unit. При этом программа должна удовлетворять следующим требованиям:
Все оверлейные модули должны быть откомпилированы в состоянии {$O+}.
Опция {$O+} – это глобальная опция «Генерация оверлейного кода» компилятора. По умолчанию она выключена ({$O-}). Использование опции эквивалентно установке пункта меню Options / Compiler / Overlays Allowed в среде языка Паскаль.
Модули, откомпилированные в состоянии {$O+}, могут быть (но не обязательно будут) оверлейными.
Все подпрограммы, прямо или косвенно вызывающие оверлейные подпрограммы, должны быть откомпилированы в состоянии {$F+}. Опция {$F+} – это локальная опция компилятора «Дальний (межсегментный) вызов процедур и функций (Far)». По умолчанию данная опция выключена ({$F-}), что соответствует ее значению «Ближний (внутрисегментный) вызов процедур и функций (Near)».
Для удовлетворения данных требований в начале каждого оверлейного модуля устанавливаются опции {$F+, $O+}, а в начало всех других модулей и главной программы помещается опция {$F+}.
Кроме того, в основной программе в предложении использования Uses необходимо подключить стандартный модуль Overlay и все используемые оверлейные модули. Модуль Overlay должен быть записан перед именами оверлейных модулей.
Затем в основной программе необходимо указать, какие модули из перечисленных в предложении Uses будут оверлейными. Для этого используется локальная директива компилятора {$O <Имя_модуля>} – «Имя оверлейного модуля». Она определяет при компиляции программы, какой из модулей помещается в файл с расширением ovr, а не в файл с расширением ехе.
(Обратите внимание на терминологию. Директива компилятора отличается от опции компилятора тем, что имеет параметр. В качестве параметра может использоваться <Имя_файла>, <Имя_модуля>, размеры (стека, области динамической памяти и т.п.). В опциях используется только ключ (+ или –)).
Директива {$O <Имя_модуля>} помещается в основной программе сразу после предложения использования Uses.
Пример 8.1.
Размещение в основной программе директив и опций.
Program Main;
{$F+}
Uses Overlay, Unit1, Unit2;
{$O Unit1}
{$O Unit2}
...
<Текст_программы>
При компиляции вышеприведенной программы (см. пример 8.1) модули Unit1, Unit2 помещаются в файл <Имя>.ovr, все остальные части программы – в файл <Имя>.ехе. <Имя> у обоих файлов должно быть одним и тем же.
Программы с оверлеями не могут компилироваться в памяти и всегда должны создаваться на диске.
Раздел инициализации (если он есть) оверлейного модуля также имеет ограничения:
В нем запрещено включать администратор оверлеев.
В нем нельзя производить какие-либо действия до включения администратора оверлеев.
Так как разделы инициализации выполняются до выполнения основной программы, то реализация данных ограничений возможна за счет введения дополнительного неоверлейного модуля. В его разделе инициализации необходимо включить администратор оверлеев. Данный модуль необходимо подключить в предложении Uses основной программы перед оверлейными модулями.
Нельзя организовывать как оверлейные стандартные модули (Dos, Crt и т.д.) и модули, содержащие обработку прерываний.