Память под динамические переменные выделяется из свободной памяти компьютера (за пределами загруженного в нее exe-файла) по запросу программы. Размер выделяемой памяти может меняться.
Рис. 13.2. Размещение динамических переменных в памяти.
Чтобы наша программа могла записывать и считывать данные из динамической переменной, нужно, чтобы операционная система пометила некоторый участок памяти как занятый и не пускала в него другие программы. Кроме того, в программе следует предусмотреть обычную статическую переменную-указатель, в которой будет храниться адрес выделенного куска памяти. Иначе говоря, динамическая переменная состоит из двух частей: ее значение лежит в оперативной памяти компьютера вне exe-файла, а обращаться к этому значению придется через статическую переменную-указатель, находящуюся внутри exe-файла. В статической переменной – указателе хранятся адрес и размер участка памяти, в котором содержится значение переменной – указателя, а в ряде случаев - и тип данных, которые можно размещать в этой динамической переменной (Рис. 9.3).
Рис. 13.3. Указатели и динамические переменные.
В тексте программы создание динамической переменной выглядит следующим образом:
TYPE TA=ARRAY[1..10] OF REAL;
VAR p:^BYTE; { указатель на байт }
p1:^TA; { указатель на массив }
Здесь p и p1 – статические переменные, в которых можно хранить адрес байта и массива типа TA соответственно. Знак "^" соответствует слову "указатель". Переменная p не будет занимать 1 байт – это указатель, в котором хранится четырехбайтный адрес в памяти, да еще и тип данных.
Важное замечание: оператор VAR динамическую память НЕ ВЫДЕЛЯЕТ. Он просто создает статические переменные-указатели. Области же памяти для хранения значений этих переменных создаются уже в момент работы программы.