мета-данные страницы
Это старая версия документа!
Работа с указателями
Процедуры и функции для работы с динамической памятью
http://www.lsnnet.ru/pascal/procedury-i-funkcii-dlya-raboty-s-dinamicheskoj-pamyatyu.html
Ниже приводится описание как уже рассмотренных процедур и функций, так и некоторых других, которые могут оказаться полезными при обращении к динамической памяти. ,
Функция ADDR.
Возвращает результат типа POINTER, в котором содержится адрес аргумента. Обращение:
ADDR ( X )
Здесь Х- любой объект программы (имя любой переменной, процедуры, функции). Возвращаемый адрес совместим с указателем любого типа. Отметим, что аналогичный результат возвращает операция @ .
Функция CSEG.
Возвращает значение, хранящееся в регистре CS микропроцессора в начале работы программы в регистре CS содержится сегмент начала кода программы). Обращение:
CSEG
Результат возвращается в слове типа WORD.
Процедура DISPOSE.
Возвращает в кучу фрагмент динамической памяти, который ранее был зарезервирован за типизированным указателем. Обращение:
DISPOSE(TP)
Здесь ТР – типизированный указатель. При повторном использовании процедуры применительно к уже освобожденному фрагменту возникает ошибка периода исполнения. При освобождении динамических объектов можно указывать вторым параметром обращения к DISPOSE имя деструктора (подробнее см. гл.10).
Функция DSEG.
Возвращает значение, хранящееся в регистре DS микропроцессора (в начале работы программы в регистре DS содержится сегмент начала данных программы). Обращение:
DSEG
Результат возвращается в слове типа WORD.
Процедура FREEMEM.
Возвращает в кучу фрагмент динамической памяти, который ранее был зарезервирован за нетипизированным указателем. Обращение:
FREEMEM ( Р, SIZE )
Здесь Р – нетипизированный указатель;
SIZE – длина в байтах освобождаемого фрагмента.
При повторном использовании процедуры применительно к уже освобожденному фрагменту возникает ошибка периода исполнения.
Процедура GETMEM.
Резервирует за нетипизированным указателем фрагмент динамической памяти требуемого размера. Обращение:
GETMEM ( Р, SIZE )
За одно обращение к процедуре можно зарезервировать не более 65521 байтов динамической памяти. Если нет свободной памяти требуемого размера, возникает ошибка периода исполнения. Если память не фрагментирована, последовательные обращения к процедуре будут резервировать последовательные участки памяти, так что начало следующего будет располагаться сразу за концом предыдущего.
Процедура MARK.
Запоминает текущее значение указателя кучи HEAPPTR. Обращение:
MARK ( PTR )
Здесь PTR – указатель любого типа, в котором будет возвращено текущее значение HEAPPTR. Используется совместно с процедурой RELEASE для освобождения части кучи.
Функция MAXAVAIL.
Возвращает размер в байтах наибольшего непрерывного участка кучи. Обращение:
MAXAVAIL