мета-данные страницы
Загрузка не удалась. Возможно, проблемы с правами доступа?
Различия
Показаны различия между двумя версиями страницы.
Предыдущая версия справа и слеваПредыдущая версияСледующая версия | Предыдущая версияПоследняя версияСледующая версия справа и слева | ||
pascal:pointers [20/10/2009 12:06] – ybezrukov | pascal:pointers [21/11/2009 18:12] – oca | ||
---|---|---|---|
Строка 2: | Строка 2: | ||
FIXME | FIXME | ||
+ | |||
+ | ===== Процедуры и функции для работы с динамической памятью ===== | ||
+ | |||
+ | [[http:// | ||
+ | |||
+ | Ниже приводится описание как уже рассмотренных процедур и функций, | ||
+ | |||
+ | Функция ADDR. | ||
+ | |||
+ | Возвращает результат типа POINTER, в котором содержится адрес аргумента. Обращение: | ||
+ | |||
+ | ADDR ( X ) | ||
+ | |||
+ | Здесь Х- любой объект программы (имя любой переменной, | ||
+ | |||
+ | Функция CSEG. | ||
+ | |||
+ | Возвращает значение, | ||
+ | |||
+ | CSEG | ||
+ | |||
+ | Результат возвращается в слове типа WORD. | ||
+ | |||
+ | Процедура DISPOSE. | ||
+ | |||
+ | Возвращает в кучу фрагмент динамической памяти, | ||
+ | |||
+ | DISPOSE(TP) | ||
+ | |||
+ | Здесь ТР – типизированный указатель. При повторном использовании процедуры применительно к уже освобожденному фрагменту возникает ошибка периода исполнения. При освобождении динамических объектов можно указывать вторым параметром обращения к DISPOSE имя деструктора (подробнее см. гл.10). | ||
+ | |||
+ | Функция DSEG. | ||
+ | |||
+ | Возвращает значение, | ||
+ | |||
+ | DSEG | ||
+ | |||
+ | Результат возвращается в слове типа WORD. | ||
+ | |||
+ | Процедура FREEMEM. | ||
+ | |||
+ | Возвращает в кучу фрагмент динамической памяти, | ||
+ | |||
+ | FREEMEM ( Р, SIZE ) | ||
+ | |||
+ | Здесь Р – нетипизированный указатель; | ||
+ | |||
+ | SIZE – длина в байтах освобождаемого фрагмента. | ||
+ | |||
+ | При повторном использовании процедуры применительно к уже освобожденному фрагменту возникает ошибка периода исполнения. | ||
+ | |||
+ | Процедура GETMEM. | ||
+ | |||
+ | Резервирует за нетипизированным указателем фрагмент динамической памяти требуемого размера. Обращение: | ||
+ | |||
+ | GETMEM ( Р, SIZE ) | ||
+ | |||
+ | За одно обращение к процедуре можно зарезервировать не более 65521 байтов динамической памяти. Если нет свободной памяти требуемого размера, | ||
+ | |||
+ | Процедура MARK. | ||
+ | |||
+ | Запоминает текущее значение указателя кучи HEAPPTR. Обращение: | ||
+ | |||
+ | MARK ( PTR ) | ||
+ | |||
+ | Здесь PTR – указатель любого типа, в котором будет возвращено текущее значение HEAPPTR. Используется совместно с процедурой RELEASE для освобождения части кучи. | ||
+ | |||
+ | Функция MAXAVAIL. | ||
+ | |||
+ | Возвращает размер в байтах наибольшего непрерывного участка кучи. Обращение: | ||
+ | |||
+ | MAXAVAIL | ||
+ | |||
+ | Результат имеет тип LONGINT. За один вызов процедуры NEW или GETMEM нельзя зарезервировать памяти больше, | ||
+ | |||
+ | Функция MEMAVAIL. | ||
+ | |||
+ | Возвращает размер в байтах общего свободного пространства кучи. Обращение: | ||
+ | |||
+ | MEMAVAIL | ||
+ | |||
+ | Результат имеет тип LONGINT. | ||
+ | |||
+ | Процедура NEW. | ||
+ | |||
+ | Резервирует фрагмент кучи для размещения переменной. Обращение: | ||
+ | |||
+ | NEW ( ТР ) | ||
+ | |||
+ | Здесь ТР – типизированный указатель. | ||
+ | |||
+ | За одно обращение к процедуре можно зарезервировать не более 65521 байта динамической памяти. Если нет свободной памяти требуемого размера, | ||
+ | |||
+ | Процедура 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 значение указателя кучи. Освобождается участок кучи от адреса, | ||
+ | |||
+ | Функция SEG. | ||
+ | |||
+ | Возвращает значение типа WORD, содержащее сегмент адреса указанного объекта. Вызов: | ||
+ | |||
+ | SEG ( X ) | ||
+ | |||
+ | Здесь X – выражение любого типа или имя процедуры. | ||
+ | |||
+ | Функция SIZEOF. | ||
+ | |||
+ | Возвращает длину в байтах внутреннего представления указанного объекта. Вызов: | ||
+ | |||
+ | SIZEOF ( X ) | ||
+ | |||
+ | Здесь X – имя переменной, |