Все переменные, действующие в программе, должны быть перечислены в разделе описаний, причём каждая переменная должна иметь имя (идентификатор). При запуске программы транслятор, анализируя блок var раздела описаний, формирует специальные таблицы, в которые заносит данные о том, сколько памяти должно быть выделено каждой переменной, и реально выделяет соответствующее место в памяти, которое называют сегментом (областью) данных. При наличии в программе процедур и функций транслятор для входящих в них переменных заранее выделяет некоторый другой объём памяти, называемый стеком.
Память, выделенная переменным при активизации раздела описаний программы, сохраняется за ними на всё время работы программы. Поэтому такие переменные называют статическими. Все объявленные переменные размещаются в одной непрерывной области оперативной памяти (сегменте данных).
Динамической памятью называют оперативную память ЭВМ, предоставляемую программе при её работе, за вычетом сегмента данных (обычно 64 кбайт), стека (обычно 19 кбайт) и объёма, занимаемого самой программой. Динамически распределяемую область оперативной памяти называют кучей (heap).
Соответственно переменные, созданием и уничтожением которых может явно управлять программист, называют динамическими. Динамические переменные, количество и место расположения которых в памяти заранее неизвестно, невозможно обозначить идентификаторами. Поэтому единственным средством доступа к динамическим переменным являются указатели и ссылки на место их текущего расположения в памяти.
Разница между статическими и динамическими переменными в первую очередь заключается в обращении к ним. К статическим переменным обращаются по имени (идентификатору), к динамическим – по адресу.