Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
slaid_3_portal_2011.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
553.98 Кб
Скачать

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

program My;

var

nA : integer;

cA : char;

pA : pointer;

pnA : ^integer;

const

nB: integer = 5;

Begin

End.

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

static int nA;

void main ()

{

static int nB;

{

static char cA;

}

}

Реалізація стратегії динамічного розподілу пам'яті на основі блоку (Pascal)

program My;

procedure A;

var ____//_____

const ____//_____

begin

end;

Begin

End.

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

void main ()

{

auto int nB;

{

char cA;

}

}

пам'ять під об'єкти (змінні) nB і cA буде розподілено динамічно «при вході» у блок, а конструкції об'єктів буде розміщено у стеку. Оскільки більшість об'єктів розподіляється саме в такий спосіб, то в мові С прийнято рішення замовчувати описувач auto.

Динамічний розподіл пам'яті на основі купи

Купа (heap) - це спеціальний спосіб розподілювана пам'ять. Особливість розподілу купи полягає в тому, він здійснюється на вільне місце в пам'яті-купі під управлінням спеціального засобу – менеджера купи.

Спільним для більшості мов є те, що для реалізації цієї стратегії використовується вказівна типізована змінна. При цьому сама змінна розподіляється статично або динамічно на основі блока, а її розіменований уручну вміст розміщується в купі.

Рис. Розподіл пам’яті в купі за допомогою

вказівної типізованої змінної

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