Статической переменной (статически размещенной) называется описанная явным образом в программе переменная, обращение к ней осуществляется по имени. Место в памяти для размещения статических переменных определяется при компиляции программы. Память под такую переменную резервируется при запуске программы и освобождается только при завершении работы программы.
Все глобальные переменные в программе являются статическими переменными. Локальные переменные подпрограмм полустатическими, так как память под них выделяется в аппаратном стеке при вызове подпрограммы, а освобождается при возврате из подпрограммы.
При использовании указателей в программе могут использоваться динамические переменные. Такие переменные не указываются явно в описаниях переменных и к ним нельзя обратиться по имени. Доступ к ним выполняется только с использованием указателей. Такие переменные создаются и память под них выделяется в любом месте программы при необходимости работы с ней. После работы с такой переменной она должна быть удалена, то есть должна быть освобождена память занимаемая переменной.
Для работы с динамическими переменными используются следующие стандартные процедуры:
Процедура New(var p:Pointer) выделяет место в динамической области памяти для размещения динамической переменной p^ и ее адрес присваивает указателю p.
Процедура Dispose(var p:Pointer) освобождает участок памяти, выделенный для размещения динамической переменной процедурой New, и значение указателя p становится неопределенным.
Процедура GetMem(var p:Pointer; size:Integer) выделяет участок памяти и присваивает адрес его начала указателю p, размер участка в байтах задается параметром size.
Процедура FreeMem(var p:Pointer[; size:Integer]) освобождает участок памяти, адрес начала которого определен указателем p, а размер - параметром size. Значение указателя p становится неопределенным.
Структурированные типы данных, такие, как массивы, множества, записи, представляют собой статические структуры, так как их размеры неизменны в течение всего времени выполнения программы.
Это не всегда удобно так как:
1. Большие структуры данных занимаются большие объемы памяти ЭВМ на все время выполнения программы, то есть неэкономно используется память.
2. Часто требуется, чтобы структуры данных меняли свои размеры и состав в ходе решения задачи.
При использовании динамических структур, решаются эти две проблемы, а также появляется возможность использовать нестандартные структуры данных, такие как списки, очереди, стеки, деревья.
Динамические структуры данных – это структуры, для работы с которыми используются указатели в явном и неявном виде.
В неявном виде указатели используются для динамических строк, массивов и для классов.
Используя указатель в явном виде и любой стандартный структурированный тип можно объявить новый динамический структурированный тип.