Процедура GetMem(p,size);
P – var типа указатель,
Size – размер запрашиваемой памяти в байтах.
Используется для нетипизированных указателей. Создает новую динамическую переменную требуемого размера и помещает адрес блока в переменную типа указатель р.
Type
Rec=record
Fam:string[20];
Rost:byte
End;
Var
P1:pointer;
---------------------------------------------
GetMem(p1,SizeOf(Rec)); {размещение памяти}
SizeOf - стандартная функция, возвращает размер аргумента в байтах.
Выделится SizeOf(Rec) байтов в куче и адрес начала этих байтов поместится в адрес р1.
GetMem(p,200); {размещение памяти}
Выделится 200 байтов в куче и адрес начала этих байтов поместится в адрес Р.
Динамическая память может быть освобождена 3-мя способами:
1. по завершению всей программы.
2. С помощью процедуры Dispose (для типизированных указателей)
New(p1);
----------------
Dispose(p1);
Освобождает n байтов в куче (n зависит от типа), начиная с адреса, записанного в указателе Р.
3. С помощью процедуры FreeMem (для нетипизированных указателей)
GetMem(p,200);
---------------------------
FreeMem(p,200);
Освобождает 200 байтов в куче, начиная с адреса, записанного в указателе Р.
|
|
После освобождения памяти указатели автоматически не обнуляются и фактически указывают на несуществующую переменную. Поэтому рекомендуется всем высвободившимся указателям присвоить значение nil.
При выделении динамической памяти полезной является функция MaxAvail – возвращает размер наибольшего непрерывного участка свободной памяти.
Var
P2:^real;
If MaxAvail>sizeof(real) then new(p2);