ВУЗ:
Составители:
Рубрика:
12
1.5 Процедуры New и Delete
Для выделения динамической памяти, контролируемой типизированным ука-
зателем, используется стандартная процедура New, для освобождения – стандарт-
ная процедура Dispose. Если pt – указатель на тип T, то вызов New(pt) рас-
пределяет в динамической памяти переменную типа T и записывает в pt адрес
этой переменной:
pt
динамическая память
динамическая
переменная
pt^
Переменная, распределенная в динамической памяти, называется динамической
переменной. Она не имеет своего имени и для доступа к ней используется разы-
менованный указатель pt^. После работы с динамической переменной занимае-
мая ею память должна быть освобождена вызовом стандартной процедуры
Dispose, например: Dispose(pt). Таким образом, динамическая переменная
существует между вызовами New и
Dispose:
var pt: ^real;
begin
New(pt);
pt^:=2.8;
pt^:=pt^*2;
...
Dispose(pt);
end.
Выделение и освобождение динамической памяти выполняется специальной
подсистемой программы, называемой менеджером кучи. Менеджер кучи хранит
список всех незанятых блоков в динамической памяти. При вызове New менеджер
кучи ищет незанятый блок подходящего размера, выделяет в нем память и моди-
фицирует список незанятых блоков. При вызове Dispose
блок вновь помечается
как свободный. После завершения программы вся выделенная для нее динамиче-
ская память автоматически возвращается назад системе.
Если динамическая память выделяется в подпрограмме для решения локаль-
ных задач данной подпрограммы, то она должна быть освобождена в конце рабо-
ты этой подпрограммы. Исключение составляют так называемые «создающие»
подпрограммы, основным
предназначением которых является вернуть объект,
созданный в динамической памяти. Например:
Страницы
- « первая
- ‹ предыдущая
- …
- 8
- 9
- 10
- 11
- 12
- …
- следующая ›
- последняя »