Иллюстрированный самоучитель по Tirbo Pascal


              

Процедуры и функции для работы с динамической памятью


Ниже приводится описание как уже рассмотренных процедур и функций, так и некоторых других, которые могут оказаться полезными при обращении к динамической памяти. ,

Функция 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 байтов динамической памяти. Если нет свободной памяти требуемого размера, возникает ошибка периода исполнения. Если память не фрагментирована, последовательные обращения к процедуре будут резервировать последовательные участки памяти, так что начало следующего будет располагаться сразу за концом предыдущего.



Содержание  Назад  Вперед