Динамическая память может быть выделена с помощью процедур New или GetMem. Процедура New выделяет ОП, размер которой определяется типом указателя – фактического параметра, и присваивает указателю адрес начала выделенной ОП. Процедура GetMem выделяет ОП размера, заданного параметром size.
За одно обращение к подпрограммам выделения ОП не может быть выделено более 216 -16 = 65536 -16 = 65620 байт.
Если свободной ОП кучи недостаточно для выделения, возникает ошибка на этапе выполнения программы. Возможность возникновения ошибки можно определить с помощью функций без параметров MaxAvail или MemAvail. Для определения возможности размещения очередной динамической переменной надо сравнить значение результата функции MaxAvail с требуемым объёмом ОП.
1. куча пуста, например, в начале выполнения программы или после её освобождения. При этом монитор кучи заполняет кучу последовательно в порядке поступления запросов;
2. куча фрагментирована, то есть в процессе работы образовались освобожденные участки ОП (дырки). Монитор просматривает список свободных областей ОП и ищет такой свободный участок ОП, чтобы различие между размером свободного и требуемого участка ОП была минимальной.
Когда куча заполнена и очередной запрос на размещение динамической переменной не может быть выполнен, возникает ошибка: