Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Паскаль (ст 33).doc
Скачиваний:
3
Добавлен:
13.11.2019
Размер:
821.76 Кб
Скачать

Динамические структуры данных

1. Статическая и динамическая память.

Все глобальные переменные и типизированные константы, объявленные в программе, размещаются в одной непрерывной области оперативной памяти, которая называется сегментом данных. Такой способ распределения памяти называется статическим распределением, т.е. распределение памяти происходит при трансляции программы (перевод программы с языка программирования на язык машинных кодов). Статическое распределение памяти эффективно, поскольку на управление памятью не тратится ни время, ни память, но длина сегмента данных ограничена, т. к. определяется характеристиками процессора, что вызывает затруднения при обработке больших массивов данных.

С другой стороны, объем памяти ПК (640 Кбайт и более) достаточен для успешного решения задач с большими объемами данных. Выходом из положения может служить использование так называемой динамической памяти. Динамическая память – это оперативная память ПК, предоставляемая программе при ее работе, за вычетом сегмента данных, стека (временная память, выделяемая для работы подпрограмм) и тела программы. Вся динамическая память рассматривается как подобная стеку структура, называемая кучей. Физически куча расположена сразу за областью памяти, которую занимает стек:

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

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

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

2. Статические и динамические переменные.

Статическая переменная:

а) описывается в основной программе, модуле или подпрограмме явно (в разделе Var) и обозначается своим именем;

б) существует в течение всего времени выполнения программы или подпрограммы, в которой она описана;

в) область памяти для хранения значений статической переменной автоматически создается в начале выполнения программы или при входе в подпрограмму и автоматически уничтожается при выходе из подпрограммы или при завершении работы программы.

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

Динамическая переменная:

а) не указывается явно в описаниях переменных (в разделе Var) и не имеет имени;

б) может создаваться и уничтожаться в любой момент выполнения программы;

в) хранится в динамической памяти.

3. Тип – указатель.

Для доступа к динамическим переменным предназначены переменные специального типа данных, называемого ссылочным. Ссылочный тип данных задается как тип-указатель на данные определенного типа:

а) в разделе описания типов

Type

<имя_ссылочного_типа> = ^ <тип данных>;

Var

<имя_переменной> : <имя_ссылочного типа>;

Пример 1.

Type

T = ^ Integer; {объявление ссылочного типа}

Var

A : T; {указатель А ссылается на динамическую переменную целого типа}

б) явно в разделе описания переменных

Var

<имя_переменной> : ^ <тип данных>;

Пример 2.

Var

B : ^ Real; {указатель В ссылается на динамическую переменную вещественного типа}

<Тип данных> является базовым типом. В качестве базового типа может использоваться любой стандартный тип данных языка Pascal (включая структурированные типы данных и тип-указатель) либо тип данных, определенный пользователем в разделе Type. В примере 1 для ссылочного типа Т базовым является тип Integer. Для переменной-указателя А тип задан через идентификатор, описанный в разделе описания типов, в примере 2 для переменной-указателя В – в явном виде.

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

Переменная ссылочного типа (типизированный указатель) может указывать на динамические переменные только заданного <типа данных>.