Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЯП / lec_07_08.ppt
Скачиваний:
21
Добавлен:
19.04.2015
Размер:
621.57 Кб
Скачать

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

Общее свойство рассмотренных типов данных (простых, структурированных) :

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

Это - статические данные и структуры данных.

Доступ к статическим переменным осуществляется через их имена.

1

В ЯП высокого уровня обычно есть возможность выделять и освобождать память для размещения данных

во время работы программы.

Таким образом можно сконструировать

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

Область оперативной памяти для размещения динамических данных называется

динамической памятью, или кучей

(англ. Heap - куча, множество, накопление).

Доступ к динамическим переменным осуществляется через указатели на место их расположения в памяти.

2

Тип-указатель

Указатель дает адрес элемента

определенного, базового типа

Указатель указывает на элемент

базового типа.

Стандартный тип-указатель Pointer

является бестиповым и совместим с любым указателем.

Значение указателя занимает 4 байта

3

Адрес – совокупность двух 16-ти разрядных слов - сегмента и смещения.

Сегмент - участок памяти, имеющий максимальную длину 64К.

Сегменты адресуют память с точностью до параграфа (фрагмент памяти =16 байт).

Смещение – линейная адресация в сегменте

Смещение адресует память с точностью до байта.

Глобальные переменные и типизированные константы размещаются в сегменте данных.

Такие переменные называются статическими.

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

4

Организация памяти во время выполнения программы

Куча используется для размещения объектов, созданных при помощи операции new.

5

Организация памяти во время выполнения программы

Куча используется для размещения динамических переменных.

6

Объявление типа

type Pбазовый_тип =^базовый_тип;

var p1:Pбазовый_тип; p2: Pointer;

Пример:

type PByte =^Byte; var px:PByte;

{в рx может храниться адрес области памяти

}

7

Операции, изменяющие значения

указателей

Операция взятия адреса с последующим присваиванием:

указатель:=@переменная базового типа;

Операция присваивания

для однотипных указателей.

Операция присваивания константы NIL любым указателям.

NIL - пусто, ничто

переменная ни на что не указывает.

8

Операции над указателями

Операции сравнения

= <> для однотипных указателей.

Операция разыменования –

взятие элемента по указателю:

значение элемента, с которым связан

указатель:

указатель^

9

Стандартные процедуры для работы с динамической памятью

procedure New(P);

Процедура выделяет область памяти, соответствующую базовому типу указателя P.

Переменная P принимает значение указателя на эту область.

Можно использовать и как функцию:

New(px);

или

px := New(PByte);

10

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