а) Нижняя граница Heap (куча, множество) области определяется стандартным указателем Heap Org, который содержит абсолютный адрес начала динамической памяти. Верхняя граница Heap – области определяется указателем Heap End. Текущее значение указателя, разделяющего занятую и незанятую части Heap – области, содержит указатель Heap – Ptr . При каждом новом выделении памяти система управления Heap - областью передвигает указатель Heap – Ptr вверх (в сторону увеличения адресов памяти).
При работе с динамической памятью, помимо кучи, выделяется ещё один участок памяти, расположенный в самых верхних адресах DOS (свободная память). Адрес его нижней границы хранится в указателе Free Ptr. В Турбо Паскале размером ДРОП можно управлять с помощью директивы компилятора {$M}.
Синтаксис директивы {$M}
{$M размер стека, размер динамической области}
По умолчанию {$?M? 16.384, 655360}.
Размер стека – в пределах: 1024-65534
Размер ДРОП – 0 – 655360
Указатель в Паскале занимает 4 байта памяти (2 слова). Первое слово дает смещение адреса, второе – адрес сегмента.
В Турбо Си в OC MS-DOS и микропроцессорах семейства 8086 (80286, 80386, 80486) размер указателя зависит от модели памяти, задаваемой при компиляции программы. Модель памяти по умолчанию – small (маленькая). Под код программы отводится сегмент размером 64 К. Стек, куча и статические данные размещаются в одном сегменте, размером 64 К. Такая модель памяти подходит для многих маленьких и средних задач. Указатели в такой модели занимают только два байта (близкие указатели – модификатор REAL), т.е., следовательно, содержат смещение внутри фиксированного сегмента памяти. Кроме этой имеется ещё пять моделей памяти:
- Tiny – минимальная. Общий размер кода, данных и стека – 64 Кбайт. Все указатели ближние.
- Medium – модель памяти для больших программ, для которых не требуется держать в памяти большой объем данных. Для кода, но не для данных используются дальние указатели (far – 4 байта). Объем памяти данных и стека – 64 Кбайт, программа может занимать до 1 Мбайта.
- Compact – этот метод используется в тех случаях, когда размер кода невелик, но требуется адресация большого объема данных (1 Мбайт) , но не для кода (64Кбайт).
- Large и Huge – модели памяти для очень больших программ. Для кода и для данных используются дальние указатели. Модель Huge к тому же ещё и отменяет ограничение размера памяти, выделяемой под статические данные.
Пример: VAR P:^INTEGER;
BEGIN
NEW (P);
END.
После выполнения процедуры NEW (P); указатель P приобретает значение, равное тому, которое до сих пор имел текущий указатель Heap Ptr, а значение указателя Heap Ptr будет увеличено на 2, т.к. длина внутреннего представления типа integer, с которым связан указатель Р, равна 2 байта. Если указатель ссылается на тип данных для которых требуется память больше, чем доступно для распределения в куче, то в этом случае происходит ошибка выполнения программы. Поэтому, перед тем как использовать стандартные процедуры распределения динамической памяти, необходимо проверит наличие требуемого объема памяти в куче.
Пример:
FUNCTION CHECK (VAR P: PIONTER; SIZE: WORD): BOOLEAN;
BEGIN
CHECK: = false;
if SIZE > MAXAVAIL then EXIT;
CHECK: =true; {Выделение памяти состоялось}
GETMEN (P, SIZE);
END.
Функция MAXAVAIL возвращает размер в байтах наибольшего непрерывного участка памяти в куче, т.е. выполнение условия SIZE > MAXAVAIL говорит о том, что нет сплошного фрагмента памяти, который необходимо выделить по запросу GETMEN (P, SIZE).
п. 18. Графический режим.
Управление экраном в графическом режиме производится с помощью функций, прототипы которых записаны в заголовочном файле GRAPHICS.H.
Отличие графического окна от текстового заключается в том, что левый верхний угол окна имеет координаты (0,0) а не (1,1) . По умолчанию графическое окно равно полному экрану. Прежде чем использовать графические функции нужно установить видеоадаптер в графический режим.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.