Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Ответы на модуль 1 ОП.docx
Скачиваний:
8
Добавлен:
24.11.2019
Размер:
926.17 Кб
Скачать

21) Стратегія динамічного розподілу пам'яті на основі блока

Ця стратегія ґрунтується на понятті блока й характеризується такими властивостями:

  • зв'язок між ім'ям змінної та генерованим вмістом установлюється під час виконання програми, при обробці блока, тому може змінюватися при повторному входженні у блок;

  • розподіл пам'яті відбувається під час обробки відповідної частини блока, що містить описи об'єктів;

  • всі об'єкти у блоці є локальними, мають локальний період існування та локальну область дії, які обмежені даним блоком і підпорядковані мембранному ефекту;

  • пам'ять для об'єктів захоплюється у міру появи описів об'єктів у блоці та вивільняється у зворотному порядку при закритті блока;

  • для організації цієї пам'яті використовується механізм стека типу «перший прийшов – останнім пішов» [];

  • стек організовується у спеціальному місці пам'яті програми - сегменті стека, що має обмежений розмір, зазвичай близько 64 К;

  • захоплення та вивільнення пам'яті здійснюються автоматично;

  • генерований вміст значенням не ініціалізується.

22) Стратегія розподілу пам'яті в купі

Стратегія характеризується такими особливостями:

  • зв'язок між ім'ям змінної та генерованим вмістом, установлюється під час виконання програми, тому може змінюватися;

  • розподіл пам'яті для вмісту здійснюється ручним запуском генератора на спеціальну ділянку пам'яті за принципом «куди-небудь – на вільне місце»;

  • ділянка пам'яті організується у спеціальному місці пам'яті програми - купі (heap), яка має доволі|досить| великий розмір;

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

  • захоплення та вивільнення пам'яті відбувається вручну шляхом використання спеціальних операторів;

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

  • «сміття» не можна зайняти під значення іншого вмісту;

  • для вивільнення зайнятої «сміттям» пам'яті передбачаються спеціальні процедури збирання «сміття»;

  • генерований вміст значенням не ініціалізується.

23) Реалізація стратегій розподілу пам'яті

У різних мовах програмування зазначені стратегії описуються синтаксично різними, але реалізуються семантично однаковими засобами. Особливості зумовлюються, як правило, відмінностями в інтерпретації поняття блока. Наприклад, у мові С, на відміну блок не лише лежить в основі закритих підпрограм, але й має від мови Psscal самостійне значення.

Реалізація стратегії статичного розподілу пам'яті

Реалізація в мові Pascal. Статично розподіленими є об'єкти, які описано в найбільш зовнішньому блоці. Наприклад, у програмі:

program MyProgram;

var

nA : integer;

cA : char;

pA : pointer;

pnA : ^integer:

:

:

begin

:

end,

пам'ять під об'єкти nA, cA, pA, pnA розподіляється статично.

Реалізація в мові С. Статично розподіленими є об'єкти, описані спеціальним описувачем static. Наприклад, у програмі:

static nA int;

main ( )

{static cA chr;

nB int;

:

:

},

пам'ять під об'єкт nA, cA розподіляється статично.

14.2.2. Реалізація стратегії динамічного розподілу пам'яті

Існує дві стратегії – на основі блока і на основі купи (рис. 14.1).