мета-данные страницы
  •  
Загрузка не удалась. Возможно, проблемы с правами доступа?

Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Предыдущая версия справа и слеваПредыдущая версия
Последняя версияСледующая версия справа и слева
pascal:pointers [21/11/2009 18:12] ocapascal:pointers [21/11/2009 18:12] oca
Строка 74: Строка 74:
  
 MAXAVAIL MAXAVAIL
 +
 +Результат имеет тип LONGINT. За один вызов процедуры NEW или GETMEM нельзя зарезервировать памяти больше, чем значение, возвращаемое этой функцией.
 +
 +Функция MEMAVAIL.
 +
 +Возвращает размер в байтах общего свободного пространства кучи. Обращение:
 +
 +MEMAVAIL
 +
 +Результат имеет тип LONGINT.
 +
 +Процедура NEW.
 +
 +Резервирует фрагмент кучи для размещения переменной. Обращение:
 +
 +NEW ( ТР )
 +
 +Здесь ТР – типизированный указатель.
 +
 +За одно обращение к процедуре можно зарезервировать не более 65521 байта динамической памяти. Если нет свободной памяти требуемого размера, возникает ошибка периода исполнения. Если память не фрагментирована, последовательные обращения к процедуре будут резервировать последовательные участки памяти, так что начало следующего будет располагаться сразу за концом предыдущего.
 +
 +Процедура 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).