Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учебник_Часть_1.doc
Скачиваний:
1
Добавлен:
01.04.2025
Размер:
974.85 Кб
Скачать

Var a1: array[1..300,1..300] of integer.

Такие переменные, описанные в разделе var, Н. Вирт назвал статическими за то, что они могут обрабатываться компилятором без выполнения программы на основании одного только статического (неизменного) текста программы. В нашем примере общее количество элементов 90 000, необходимый объем памяти равен 90000 х 2 = 180 000 байт. При этом маловероятно, что программе могут одновременно понадобиться все 90000 элементов. Кроме того, все переменные, объявленные в программе, располагаются в одной непрерывной области памяти «сегменте данных», длина которого (определяется архитектурой микропроцесcора) равна 64 Кб, что также вызывает затруднения при обработке больших массивов.

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

Помимо экономии памяти, динамические переменные позволяют решать задачи, для которых невозможно предсказать размер памяти в момент написания программы. Необходимость в динамическом распределении памяти возникает при разработке САПР (так как размеры различных матричных моделей могут существенно отличаться); при работе с графическими и звуковыми средствами ПК.

Итак, работа с переменными в различных языках программирования может быть организована различными способами:

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

2. Динамический. Для хранения переменных выделяется общий участок памяти, а выделение памяти под конкретные переменные проводится на этапе выполнения программы. Участок оперативной памяти, в котором создаются динамические переменные, часто называют кучей.

3. Совмещение статической и динамической памяти - выделение места для локальных параметров подпрограмм.

Динамическая память – это оперативная память, выделяемая программе при ее работе за вычетом сегмента данных (64 Кб), стека (обычно 16 Кб) и размера самой программы. Распределение памяти показано на рис. 13.1.

Старшие

адреса Системные программы HEAPEND

Еще не распределенная память HEAPPTR

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Динамическая память

(расширяется в сторону увеличения адресов) HEAPORG

До 64 К Сегмент стека

(расширяется в сторону уменьшения адресов)

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Свободная память стека

До 64 К Сегмент данных основной программы

(глобальные переменные, тип const)

До 64 К Сегменты кодов включаемых модулей

к аждый

До 64 К Сегмент кода основной программы

Младшие Паскаль

адреса системные программы

памяти

Рис. 13.1. Распределение памяти