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
Автоматическое хранение - еще один пример принципа наименьших привилегий. Зачем хранить в памяти и делать доступными переменные, когда они не нужны?
- 116 Глава 2
- 2.13. Основы повторения, управляемого счетчиком
- 2.14. Структура повторения for (цикл)
- 120 Глава 2
- 122 Глава 2
- 2.15. Пример использования структуры for
- 124 Глава 2
- 126 Глава 2
- 2.16. Структура множественного выбора switch
- Глава 2
- 130 Глава 2
- 132 Глава 2
- 2.17. Структура повторения do/while
- 134 Глава 2
- 2.18. Операторы break и continue
- Глава 2
- 2.19. Логические операции
- 138 Глава 2
- Глава 2
- 2.21. Заключение по структурному программированию
- IfcrpyKTypa (единственный выбор)
- Глава 2
- Глава 2
- 148 Глава 2
- Глава 2
- Глава 2
- Глава 2
- 156 Глава 2
- 158 Глава 2
- 160 Глава 2
- 2.1. А) следование, выбор и повторение, b) if/else. С) управляемым счет чиком или определенным заранее, d) Метку, сигнал, флаг или лож ный сигнал.
- 162 Глава 2
- 164 Глава 2
- 166 Глава 2
- 168 Глава 2
- 170 Глава 2
- 172 Глава 2
- 174 Глава 2
- 176 Глава 2
- 178 Глава 3
- Глава 3
- 3.3. Математические библиотечные функции
- 3.4. Функции
- Глава 3
- 3.5 Определения функций
- 184 Глава 3
- 186 ГлаваЗ
- 3.6. Прототипы функций
- 188 Глава 3
- 3.7. Заголовочные файлы
- 3.8. Генерация случайных чисел
- Глава 3
- 192 Глава 3
- 194 Глава 3
- 3.9. Пример: азартная игра
- Глава 3
- 198 Глава 3
- 3.10. Классы памяти
- 200 Глава 3
- 3.11. Правила, определяющие область действия
- 202 Глава 3
- 204 Глава 3
- 3.12 Рекурсия
- Глава 3
- 6) Значения, возвращаемые после каждого рекурсивного вызова
- 3.13. Пример использования рекурсии: последовательность чисел Фибоначчи
- Глава 3
- 3.14. Рекурсии или итерации
- 212 Глава 3
- Глава 3
- Глава 4
- Глава 5
- Глава 6
- 3.15. Функции с пустыми списками параметров
- 214 Глава 3
- 3.16. Встраиваемые функции