Type
T_s=string[1];
Var
P0:^T_s;
Begin
Writeln(memavail); 570200
New(p0);
Writeln(memavail); 570192
Dispose(p0); 570200
Freelist – данный указатель содержит адрес описателя первого свободного блока.
В момент загрузки программы указатели Freelist, heapOrg и heapPtr содержат один и тот же адрес. указатели Freelist и heapPtr в ходе работы с кучей будут иметь одни и те же значения до тех пор пока в куче не образуется свободный блок памяти расположенный ниже границы которую указывает heapPtr на этот блок и будет указывать Freelist.
Если в процессе работы с кучей образуется блок ниже по адресу блока на который указывает Freelist, то этот указатель будет указывать на вновь образовавшийся блок. Если освободившейся блок выше блока с этим указателем то указатель останется на месте.
Если текущий блок является последним в списке свободных блоков то его описатель содержит адрес heapEnd и длину равную 0.
Любой новый блок памяти выделяется с адреса Freelist только в том случае если свободный блок связанный с этим указателем имеет подходящий размер, иначе ищется блок определенного размера путем прохода по всему списку свободных блоков, если подходящий блок не найден, то запрашиваемый блок выделяется адреса heapPtr (если хватает памяти).