Процедуры и функции для работы с динамической памятью
Процедура NEW может вызываться как функция. В этом случае параметром обращения к ней является тип переменной, размещаемой в куче, а функция NEW возвращает значение типа указатель. Например:
type PInt =^Integer; var p: Pint; begin p: = New(PInt); …… end.
При размещении в динамической памяти объекта разрешается в качестве второго параметра обращения к NEW указывать имя конструктора (см. гл.10).
Функция OFS
Возвращает значение типа WORD, содержащее смещение адреса указанного объекта. Вызов:
OFS (X)
Здесь Х- выражение любого типа или имя процедуры.
Функция PTR
Возвращает значение типа POINTER по заданному сегменту SEG и смещению OFS. Вызов:
PTR (SEG, OFS)
Здесь:
- SEG – выражение типа WORD, содержащее сегмент;
- OFS – выражение типа WORD, содержащее смещение.
Значение, возвращаемое функцией, совместимо с указателем любого типа.
Процедура RELEASE
Освобождает участок кучи. Обращение:
RELEASE (PTR)
Здесь PTR – указатель любого типа, в котором предварительно было сохранено процедурой MARK значение указателя кучи. Освобождается участок кучи от адреса, хранящегося в PTR, до конца кучи. Одновременно уничтожается список всех свободных фрагментов, которые, возможно, были созданы процедурами DISPOSE или FREEMEM.
Функция SEG
Возвращает значение типа WORD, содержащее сегмент адреса указанного объекта. Вызов:
SEG (X)
Здесь X – выражение любого типа или имя процедуры.
Функция SIZEOF
Возвращает длину в байтах внутреннего представления указанного объекта. Вызов:
SIZEOF (X)
Здесь X – имя переменной, функции или типа. Например, везде в программе из примера 6.1 вместо константы SIZEOFREAL можно было бы использовать обращение SIZEOF(REAL).