Блочная структура программы
- область действия
- область видимости
- время жизни
- локальные и глобальные переменные
- распределение памяти
Область действия декларации
Это часть текста программы, которая начинается с данной декларации и заканчивается концом текущего блока.
В области действия может осуществляться использование данной декларации в операторах и выражениях.
Определяющее вхождение – вхождение идентификатора в его определение.
Использующее вхождение – вхождение идентификатора в оператор/выражение.
Каждое использующее вхождение идентификатора связывается с определяющим вхождением данного идентификатора, которое имеет наименьшую область действия.
Область видимости декларации
Идентификатор, определённый в блоке, является видимым в этом блоке.
Идентификатор может быть переопределён во вложенном блоке. В этом случае объект, связанный с внешним определением, будет невидимым во вложенном блоке.
Область видимости = Область действия – блоки с переопределением
Время жизни декларации
Время жизни переменных совпадает с временем работы блока, содержащего определяющие вхождения этих переменных.
Локальные и глобальные переменные
Программный объект называется локальным по отношению к данному блоку, если блок содержит связанное с ним определяющее вхождение этого объекта, иначе он называется глобальным.
Глобальные переменные – это зло! (ц)
Использование глобальных переменных вместо передачи параметров подпрограммы снижает читаемость и надёжность программы и может привести к побочным эффектам (выполнение подпрограммой действий, результат которых обнаруживается вне данной подпрограммы)
Распределение памяти
Стек – структура данных, список, обработка которого осуществляется по принципу LIFO.
Если памяти в сегменте данных не хватает, можно использовать Кучу (Heap) и специальные подпрогрмаммы. Использование Кучи - это использование указателей и ссылочных типов. Работа с указателями требует специальных операторов.
Куча организована как связный список свободных участков памяти. Участок Кучи, выделенный одной программе, не может пересекаться с участками Кучи, выделенными другой программе.
Статические переменные – переменные, определённые в секции определения переменных программы. Они размещены в сегменте данных и живут всё время работы программы.
Динамические переменные – переменные ссылочных типов, указатели. Память под них выделяется и уничтожается во время работы программы. Хранятся в Куче.