Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекция 23.doc
Скачиваний:
5
Добавлен:
11.07.2019
Размер:
55.3 Кб
Скачать

Лекция 23: Динамическая память и указатели.

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

2. Управление динамической памятью.

3. Тип данных - Указатель.

4. Принципы работы с указателями.

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

Все рассмотренные ранее типы данных (кроме типа file) представляли статические структуры. Память выделялась под переменные этих типов до выполнения программы, а размер выделяемой памяти определялся по описаниям соответствующих переменных (например, для переменной типа byte выделялся 1 байт оперативной памяти). Такая память является статической, поскольку её размер не может изменяться при выполнении программы.

Статическая оперативная память в системе Турбо Паскаль выделяется программе отдельным сегментом, размер которого составляет 64 Кбайт. Статическая память освобождается при завершении программы. Такой принцип распределения оперативной памяти представляет серьёзные ограничения для программирования многих задач. Для ряда задач это ограничение столь серьёзно, что делает невозможным решение этих задач. Преодолеть недостатки статической памяти можно использованием динамической памяти.

Динамическая память способна полностью использовать физический объём оперативной памяти, имеющийся на компьютере. Особенность динамической памяти состоит в том, что она выделяется и освобождается в процессе выполнения программы по запросам самой программы. Динамическая память часто используется в программах Турбо Паскаля, решающих задачи управления, проектирования, обучения, а также игровые задачи. Без неё практически не обходится ни одна прикладная программа на Турбо Паскале, поэтому работа с динамической памятью является важнейшей в арсенале средств прикладного программиста.

2. Управление динамической памятью.

Для организации динамической памяти в Турбо Паскале предусмотрен специальный механизм, реализованный обслуживающей программой - менеджером динамической памяти. Вся динамическая память рассматривается менеджером как сплошной массив байтов, называемый хип-памятью (heap). Физическая хип-память размещается в старших адресах сразу за областью памяти, отводимой под тело программы. Рис. 3 иллюстрирует принцип организации хип-памяти:

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

0  max

Системная область

Программа

Динамическая

память

Cистемная область

  

HeapOrg HeapPtr HeapEnd

Рис. 3. Организация динамической памяти в Турбо Паскале.

HeapOrg- начало хип-памяти,

HeapPtr- текущая граница свободной хип-памяти,

HeapEnd- конец хип-памяти.

Указатель границы занятой памяти HeapPtr отслеживает запросы программы на выделение динамической памяти под динамически размещаемые переменные и может сдвигаться вправо при каждом обслуженном запросе (величина сдвига зависит от типа динамически размещаемой переменной). На рис.3 левая штриховка хип-памяти соответствует занятой области памяти (по обслуженным запросам), а правая штриховка - незанятой (свободной) хип-памяти. Хип-память выделяется порциями, кратными 8 байтам. При освобождении хип-памяти она возвращается для последующего возможного выделения по очередным запросам. Менеджер хип-памяти ведёт учёт всех свободных фрагментов хип-памяти, организуя их в список свободных фрагментов, расположенных ниже границы HeapPtr. При запросе на выделение хип-памятиꗬÁIЙ2ለ¿22က22Ѐ2ሢ橢橢뎲뎲222222222Й鈰 ጕ22¤2222222Ɠ222¤2222¤2222¤22222222]22۸222۸2۸222۸2222222222µ222222222222222822ʹ22Ό22222ì22Ŭ222222222222222̴22Ɯ2222222222522Ô22Ô22222Ǵ22f22222222222222222222222222|222222222222ся хип-памяти во многом случайны и зависят от динамики работы программы, может наблюдаться фрагментация структуры хип-памяти, при которой занятые и свободные участки памяти чередуются случайным образом. Менеджер придерживается также некоторой стратегии, позволяющей рационально распределять хип-память (мы не останавливаемся на этой проблеме более подробно).

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]