Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
R11_ДЗ_12.doc
Скачиваний:
2
Добавлен:
22.12.2018
Размер:
809.98 Кб
Скачать

14

ПЛАН

ДИНАМІЧНИЙ РОЗПОДІЛ ПАМ’ЯТІ 1

Статичні і динамічні змінні 1

Покажчики 2

Поняття покажчика 2

Розподіл динамічної пам’яті 4

Породження динамічних об'єктів 4

Доступ до динамічних об'єктів 5

Обробка динамічних об'єктів 5

Знищення динамічних об'єктів 6

Методи динамічного розподілу пам’яті 6

Стандартні засоби аналізу стану Heap-області 8

Динамічний розподіл пам’яті 9

Динамічні структури даних 10

Списки 10

Дерева 11

Динамічний розподіл пам’яті Статичні і динамічні змінні

Усі розглянуті дотепер програмні об'єкти мали дещо спільне:

  • породжувалися вони (виділялася під них пам'ять) перед виконанням програми;

  • існували в пам’яті комп’ютера протягом всього часу виконання програми,

  • розмір їх значень (у сенсі обсягу машинної пам'яті, необхідної для їх розміщення) протягом виконання програми залишався незмінним.

Такі програмні об'єкти і відповідні їм змінні вважаються в програмуванні статичними (постійними в ОП).

Статичні змінні – це змінні, пам'ять під які виділяється на етапі компіляції і не змінюється в процесі виконання програми.

Статичні об'єкти породжуються за допомогою відповідних оголошень. Наприклад, у мові Pascal опис змінної m у розділі змінних var виду

m:=аrray[1..20] of real;

свідчить про те, що в програмі породжується статична змінна регулярного типу (масив), значенням якої може бути упорядкована послідовність із двадцяти дійсних чисел. Пам'ять під статичні об'єкти виділяється в сегменті даних образу .exe- файлу програми.

Доступ до відповідних областей пам’яті (статичних об'єктів) у програмі здійснюється за іменами (ідентифікаторами) відповідних змінних. При цьому на машинній мові посилання на програмний об’єкт здійснюється шляхом вказання його місця в пам’яті комп’ютера, тобто адреси комірки пам'яті, починаючи з якої цей об’єкт розміщений в пам'яті.

Оскільки статичні об'єкти породжуються до виконання програми і розмір їх значень відомий заздалегідь, то місце в пам'яті комп’ютера, необхідне для зберігання їх значень, виділяється на етапі трансляції програми. Вся робота з розміщення таких об'єктів у пам'яті та формуванню посилань на ці об'єкти в машинній програмі здійснюється транслятором.

Проте використання при програмуванні лише статичних об'єктів не завжди дозволяє отримувати ефективні машинні програми, що буває надзвичайно важливим при вирішенні ряду задач. Справа у тому, що іноді на етапі написання програми не тільки не відомий розмір конкретного програмного об’єкта, але й те чи буде він існувати взагалі. Окрім того, у версіях систем програмування, що працюють під операційною системою MS-DOS, обсяг сегмента даних, що служить для розміщення статичних змінних, обмежений (64 Кб). При необхідності роботи з великими масивами інформації цього може виявитися недостатньо, особливо коли відомо, що вони потрібні не на увесь час виконання програми, а тільки на якусь незначну його частину.

Тому у мовах програмування існує й інший спосіб виділення пам'яті під дані, який називається динамічним.

Динамічні змінні - це змінні, пам'ять під які виділяється та звільняється в міру необхідності в процесі виконання програми.

Якщо наприклад, в заданому тексті, що складається із слів довільної довжини, потрібно знайти перше по порядку слово, що має певну ознаку, то змінна, значенням якої є шукане слово, в процесі виконання програми може взагалі не з'явитися (якщо в тексті немає жодного слова із заданою властивістю), а якщо вона і з'явиться, то заздалегідь невідома довжина слова, що є значенням цієї змінної. Отже, така змінна по своїй суті є динамічним програмним об'єктом.

В цьому випадку можна було обійтися використанням лише статичних змінних. Але тоді для змінної-результату довелося б відвести місце в пам'яті з розрахунку на максимально можливу довжину слова (описавши відповідним чином цю змінну), що може привести до нераціонального використання пам'яті комп’ютера.

Розміщуються динамічні змінні у спеціальній області ОП, яку називають динамічною пам’яттю (купою, Heap-областю). Розмір динамічної пам'яті - фактично уся вільна ОП (сотні кілобайт). Організована вона подібно стеку, але заповнення її йде від нижніх адрес до верхніх (рис. 1).

Старші адреси

Системні програми

Покажчики

Вільна (не розподілена) пам'ять

HeapEnd

Динамічна пам'ять

(росте нагору )

HeapPtr

HeapOrg

16 Кб

Сегмент стека

(росте вниз )

Sseg:SPtr (SP)

Вільна пам'ять стека

Sseg:0000 (SS)

64 Кб

Сегмент даних основної програми

DSeg:0000(DS)

Сегмент коду модуля System

СSeg:0000(СS)

64 Кб

Сегмент коду модуля 1

образ

. . .

.exe- файлу

64 Кб

Сегмент коду модуля N

64 Кб

Сегмент коду основної програми

256 байт

PSP (префікс основної програми)

PrefixSeg

Молодші адреси

Turbo Pascal

Рис. 1. Карта розподілу ОП при роботі програми

Використання динамічних об'єктів надає програмісту ряд додаткових можливостей. По-перше, використання динамічної пам'яті дозволяє суттєво збільшити обсяг оброблюваної інформації. По-друге, якщо потреба в якихось даних відпала до закінчення програми, то зайняту ними пам'ять можна звільнити для іншої інформації. По-третє, використання динамічної пам'яті дозволяє створювати структури даних змінного розміру.

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