Основы программирования. Указатели. Динамические структуры данных. Абстрактные типы данных. Классы - 9 стр.

UptoLike

Составители: 

11
выступает тип операнда. Кроме того, можно получить адрес переменной, вос-
пользовавшись стандартной функцией Addr(x), которая всегда возвращает зна-
чение типа pointer.
Особенностью операции @ можно воспользоваться, чтобы упростить послед-
нее решение. Для этого поставим в начале программы директиву компиляции
{$T-}, что позволит нам заменить присваивания p:=@r; pb:=p на pb:=@r и
исключить
из программы описание переменной p. Подчеркнем, что в режиме
{$T+} последнее присваивание приведет к ошибке несоответствия типов, по-
скольку @r будет возвращать значение типа ^real. Впрочем, в режиме {$T+}
можно воспользоваться явным приведением типов (pb:=PArr(@r)) или функ-
цией Addr (pb:=Addr(r)):
1.4 Динамическая память и динамические переменные
Память, отводимая под данные программы, делится на статическую, авто-
матическую и динамическую. Статическая память выделяется до начала работы
программы под глобальные переменные и константы и освобождается только при
завершении программы. Автоматическая память выделяется на программном сте-
ке под локальные переменные при вызове подпрограммы, а после завершения
подпрограммы автоматически освобождается. При
этом статическая память ини-
циализируется нулевыми значениями, а автоматическаяне инициализируется
(это делается для ускорения вызова подпрограммы).
Поскольку как программный стек, так и область статической памяти, выде-
ляются заранее в момент начала работы программы, статическая и автоматиче-
ская память имеют фиксированный размер. Однако во многих задачах в разные
моменты работы
программы требуется существенно различное количество памя-
ти. Отводить для этого фиксированный максимально необходимый размер памяти
расточительство. С данной проблемой мы уже сталкивались при работе с масси-
вами: при описании массива указывается его максимально возможный размер, те-
кущая же заполненность массива, как правило, меньше его размера.
Динамическая память, называемая также кучей,
выделяется явно по запросу
программы из ресурсов операционной системы и контролируется указателем. Она
не инициализируется автоматически и должна быть явно освобождена. В отличие
от статической и автоматической памяти динамическая память практически не
ограничена (ограничена лишь размером оперативной памяти) и может динамиче-
ски меняться в процессе работы программы. Недостатки динамической памяти
являются
продолжением ее достоинств. Во-первых, поскольку она контролирует-
ся указателем, доступ к ней осуществляется несколько дольше, чем для статиче-
ской и автоматической памяти. Во-вторых, программист сам должен заботиться о
выделении и освобождении памяти, что чревато большим количеством потенци-
альных ошибок.