Динамична памет - studopediya

Всички променливи, декларирани в програмата са поставени в една непрекъсната област памет, наречени сегмента на данни. Дължината на сегмента на данни определя 80x86 микропроцесорна архитектура и е 65536 байта, което може да предизвика трудности при обработката на големи обеми от данни. От друга страна, с личния капацитет компютърна памет е достатъчна за едно успешно решение на проблемите с едрогабаритни данни. А изход е използването на така наречената динамична памет.







Динамична памет - памет на персонален компютър, предоставена от програмата по време на работа, по-малко сегмент данни (64K), стека (обикновено 16KB) и част от самия текст на програмата. По подразбиране размерът на купчина, се определя от цялата налична памет на вашия компютър.

Динамична памет се използва за обработка на големи масиви от данни за величините. Много практически проблеми са трудно или невъзможно да се разреши без използването на динамична памет. Динамичното разпределение означава използване на данни директно динамична памет по време на работа на програмата. За разлика от статично поставяне извършва Turbo Pascal компилатор време на компилация на програмата. Динамичното разпределение не са известни на всеки вид или количество данни, които да бъдат поставени, те не могат да бъдат достъпни по име като статична променлива.

По този начин, всеки индекс е съвкупност от две думи (Word тип данни) са третирани като сегмент и отместване. Използване на указатели могат да бъдат поставени в някакви динамични типове данни памет.

В Turbo Pascal е възможно да се декларира указател и не го свързват в същото време с определен вид данни. Защото това е стандартен тип Pointer:

Индикатори от този вид се наричат ​​нетипизирани. С тяхна помощ той е удобен за динамично разпределяне на структурата на данните и вида на които се променят в хода на програмата.

това е напълно възможно, като същевременно







забранен, тъй като R 1 'r3ukazyvayut на различни типове данни. Това ограничение обаче не се отнася за нетипизирани указатели, така че можем да запишем

Връзка на стойностите, дадени тип променливи, както следва:

Структурата на динамична памет

Местоположение купчина в паметта на компютъра

Всички операции се извършват с един куп работи специални подпрограми, наречени от администратора на купчината. Той автоматично се прикрепя към програмата, като свързващата Turbo Pascal и поддържа запис на всички свободни фрагменти в купчина.

Процедури и функции за работа с динамична памет

CSEG - връща стойността съхраняват в CSmikroprotsessora регистъра (в началото на сегмента на програма регистрирате CSsoderzhitsya началото на програмния код). Резултати Word завръща в напишете дума.

Изхвърлете (tipizirovannyy_ukazatel) - процедура връща куп динамичен фрагмент памет, която преди това е бил запазен за написали показалка. Когато повторно използване на процедурата по отношение на грешката вече освободена фрагмент изпълнение случи.

функция DSEG връща стойността съхраняват в микропроцесорните регистър DS (в началото на сегмента на програма регистрирате данни DSsoderzhitsya започват програма). Резултати Word завръща в напишете дума.

FreeMem (netipizirovannyy_ukazatel, размер) - процедурата се връща куп динамичен фрагмент памет, която преди това е била запазена за типизиран указател. Има размери - дължина в байтове на освободения фрагмент.

GetMem (netipizirovannyy_ukazatel, размер) - процедура резерви типизиран указател фрагмент на необходимия размер на динамична памет.

Марк (PTR) - процедура магазини текущата стойност HeapPtr купчина показалеца. Тук PTR - указател към всякакъв вид, в която текущата стойност се връща HeapPtr. Използва се във връзка с процедура Releasedlya освобождаването на куп.

MaxAvail - връща размера в байтове, по-голямата съседна част на купчината. Резултатът е от тип LongInt.

MemAvail - функцията връща размера в байтове на пълна свобода на купчина пространство. Резултатът е от тип LongInt.

Нов (tipizirovannyy_ukazatel) - процедурата е запазено за поставяне на променливата на купчина фрагмент. Нова процедура може да се нарече като функция. В този случай, позоваването на параметър да е типът на променлива, поставен в купчина и Ню връща указател. например:

PTR (SEG, OFS) - връща стойност от тип Pointerpo предварително определен сегмент SEGI компенсира OFS. Има SEG - експресия тип Word съдържащ сегмент; OFS- тип експресия WORD включващ компенсира. Върнатата стойност на функция е съвместим с указател към всякакъв вид.

SizeOf (х) - връща дължината в байтове на вътрешния представяне на споменатия предмет. Къде х - името на една променлива, функция или тип.