logo
Харви Дейтел, Пол Дейтел Как программировать на С++ / 02-Deitel-Стр-115-214

3.10. Классы памяти

В главах с 1 по 3 мы использовали идентификаторы для имен перемен­ных. Атрибутами переменных являются имя, тип, размер и значение. В этой главе мы используем также идентификаторы в качестве имен функций, оп­ределенных пользователем. В действительности каждый идентификатор в

Функции 199

программе имеет другие атрибуты, включающие класс памяти , область действия и компоновка.

В С++ имеется четыре спецификации класса памяти : auto, register, extern и static. Спецификация класса памяти идентификатора помогает оп­ределить его класс памяти, область действия и пространство имен.

Класс памяти идентификатора определяет его время жизни — период, в течение которого этот идентификатор существует в памяти. Одни иденти­фикаторы существуют недолго, другие — неоднократно создаются и уничто­жаются, третьи — существуют на протяжении всего времени выполнения программы.

Областью действия (областью видимости) идентификатора называется область программы, в которой на данный идентификатор можно сослаться. На некоторые идентификаторы можно сослаться в любом месте программы, тогда как на другие — только в определенных частях программы.

Компоновка идентификатора определяет для программ с многими исход­ными файлами (эту тему мы начнем изучать в главе 6), известен ли иден­тификатор только в одном текущем исходном файле или же в любом исходном файле с соответствующим объявлением.

В этом разделе обсуждаются четыре спецификации класса памяти и два класса памяти. В разделе 3.11 обсуждается область действия идентификато­ров.

Спецификации класса памяти могут быть разбиты на два класса: авто­матический класс памяти с локальным временем жизни и статический класс памяти с глобальным временем жизни. Ключевые слова auto и register используются для объявления переменных с локальным временем жизни. Такие переменные создаются при входе в блок, в котором они объявлены, они существуют лишь во время активности блока и исчезают при выходе из блока.

К классу с локальным временем жизни могут относиться только пере­менные. К этому классу относятся локальные переменные функций и пара­метры функций. Спецификация auto явно объявляет переменные автомати­ческого класса памяти, т.е. с локальным временем жизни. Например, следующее объявление указывает, что переменные x и у типа float являются переменными с локальным временем жизни, т.е. они существуют только в теле функции, в которой появляется объявление:

auto float x, у;

Локальные переменные являются переменными с локальным временем жизни по умолчанию, так что ключевое слово auto используется редко. Далее мы будем ссылаться на переменные автоматического класса памяти просто как на автоматические переменные.

Совет по повышению эффективности 3.1

Автоматический класс памяти — это средство экономии памяти, так как переменные этого класса создаются при входе в блок, в котором они объявлены, и уничтожаются при выходе из блока.

Замечание по технике программирования 3.11

Автоматическое хранение - еще один пример принципа наименьших привилегий. Зачем хранить в памяти и делать доступными переменные, когда они не нужны?