Вся динамічно розподілена пам’ять може розглядатися як суцільний масив, що складається з файлів і називається Heap-областю (купа). Heap-область розміщується в пам’яті комп’ютера вслід за областю пам’яті, яку займає тіло програми.Нижня границя Heap-області визначається стандартною змінною-вказівником HeapOrg, яка містить абсолютну адресу початку динамічної пам’яті. Верхня границя Heap-область визначається вказівником HeapEnd. Поточне значення вказівника що розділяє зайняту й незайняту частину Heap-області, містить вказівник HeapPtr. При кожному новому виділенні пам’яті система управління Heap-областю пересуває вказівник HeapPtr вгору, в бік збільшення адрес пам’яті. При звільненні розподілених в динамічній пам’яті змінних відбувається зворотній процес., тобто вказівник зсувається вниз.Об’ємом динамічної розподіленої пам’яті можна керувати за допомогою директиви компілятора {$M}. Її синтаксис: {$M розмір_стеку,розмір_динамічної_памяті}. Розмір стеку є числом в межах від 1024 до 65520, розмір динамічної пам’яті – від 0 до 655360. Ця директива при використанні в модулі користувача не впливає на компіляцію програми.У мові Pascal використовуються три методи роботи з пам’яттю, яка динамічно розподіляється:
ü За допомогою процедур NEW i DISPOSE;
ü За допомогою процедур GetMem i FreeMem;
ü За допомогою процедур Mark i Release.
Одним з найпростіших способів розміщення об’єктів у пам’яті є використання процедури New, що традиційно застосовується для роботи з вказівниками.
Для того, щоб сформувати динамічний об'єкт, треба оголосити відповідний тип OBJECT і вказівник на цей тип.
Наприклад:
Type Objname = Object { - тип - Objname }...End;Pobjname = ^ObjName; { - тип - вказівник на Objname } { Оголошення динамічного об'єкту: }Var P1: Pobjname; { - з посиланням на тип - вказівник на об'єкт}Р2: ^ObjName; { - з посиланням на тип - об'єкт }New(P2);
Як і для інших типів даних, процедура New виділяє в динамічній пам’яті область, достатню для збереження екземпляру типу, що визначається вказівником, і повертає адресу цієї області у вказівнику.
Синтаксис виклику процедури NEW:
New (<ідентифікатор вказівника>);
Приклад:
VAR
P1: ^Integer;
P2: ^String;
Простий спосіб розміщення таких динамічних об'єктів:
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг(0.007 сек.)