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

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

Оскільки у мовах Pascal і С блок використовується по різному, то реалізації зазначеної стратегії також різняться.

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

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

main ( )

{auto nA int;

auto pnA * int;

:

:

},

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

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

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

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

Реалізація в мові Pascal. Для розподілу пам'яті використовується спеціальний оператор new. Для вивільнення пам'яті в купі в мові Pascal використовується оператор despose, а в мові С оператор delete. Тоді, наприклад, у програмі:

program MyProgram

var|

pnA : ^ingeger;

nA : integer;

begin

:

new (pnA):

^pnA : = nA;

:

despose pnA

end.,

розіменований вручну вміст змінної pnA буде розподілено в купі.

Реалізація в мові С. Для розподілу пам'яті використовується також, як і в мові Pascal спеціальний оператор new. Тоді, наприклад, у програмі

main ( )

{pnA * int;

nA int;

:

:

pnA = new(int);

*pnA = nA;

:

delete pnA;

}

розіменований вручну вміст змінної pnA буде розподілений в купі.

«Сміття» можна створити, наприклад, наступним чином:

main ( )

{pnA * int;

nA int;

:

:

pnA = new(int);

*pnA = nA;

pnA=new(int);

:

delete pnA;

}

24) Структурна капсула

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

Структурні капсули називаються структурними операторами і утворюють основу структурного операторного базису мов|язиків| програмування.