Шаг 70.
Статические и динамические переменные

    Этот шаг посвящен описанию классификации переменных и объяснению того, зачем же все-таки нужны указатели.

    Все переменные, используемые в программе, размещаются в памяти согласно вполне определенным правилам:

    Таким образом, распределение памяти во всех этих случаях производится полностью автоматически и подчинено стековой дисциплине. Переменные, память, под которые распределяется описанным образом, называются статическими.

    Кроме этого язык программирования Pascal дает возможность образовать новые переменные в любой момент работы программы без учета ее статической структуры, сообразуясь с потребностями решаемой задачи. Точно так же допускается уничтожение созданных переменных в произвольный момент выполнения программы. Переменные, созданием и уничтожением которых явно может управлять программист, называются динамическими переменными.

    Естественным средством доступа к статическим переменным являются идентификаторы этих переменных (статическая переменная всегда описана в некотором блоке). Динамические переменные, количество которых и место расположения в памяти заранее не известно, невозможно обозначить идентификаторами. Поэтому единственным средством доступа к динамическим переменным является указатель на место их текущего расположения в памяти. На принципе обращения к динамическим переменным посредством указателей (ссылок) на них и основаны все соответствующие средства языка Pascal.

    Для распределения памяти под локальные переменные отводится специальный сегмент оперативной памяти (сегмент стека). Аналогично, образование динамических переменных реализуется в другой области памяти, которая существует отдельно от стекового сегмента и называется кучей (heap) или динамической областью памяти.

    В заключение приведем общую схему размещения в памяти статических и динамических переменных (рис.1):


Рис.1. Расположение статических и динамических переменных

    В связи с тем, что сегмент данных имеет ограниченные размеры, то вполне вероятна ситуация нехватки памяти для размещения статических переменных. В этом случае данные можно располагать в "куче", так как чаще всего ее размер больше, чем сегмент данных.

    На следующем шаге мы рассмотрим механизм создания и уничтожения динамических переменных.


Предыдущий шаг Содержание Следующий шаг