Урок 11.4. Статические переменные
11.4. Статические переменные Читать далее
Урок 11.5. Регистровые переменные
11.5. Регистровые переменные
Переменные хранятся обычно в памяти машины. Описание register дает знать транслятору, что регистровая переменная будет интенсивно использоваться. Если возможно, регистровая переменная запоминается в регистрах центрального процессора, где доступ к ним и работа с ними выполняется гораздо быстрее, чем в памяти. Описание регистровых переменных выглядит так:
register int x; register char c; |
Описание register применимо лишь к автоматическим переменным и к формальным параметрам функций. В последнем случае описание выглядит так:
void f(register int c, register int n) { register int i; //... } |
Переменная, которую компилятор не может разместить на регистрах (не хватает регистров, либо значение переменной не помещается в регистре), становится простой автоматической переменной. Кроме того, к регистровой переменной невозможно применить операцию взятия адреса.
Урок 11.1. Понятие класса памяти
11.1. Понятие класса памяти
Мы уже знакомы с понятием локальной и глобальной перемнной. Локальные переменные известны только функциям, в теле которых они описаны. Причем, если в одной программе используются две разные функции, в теле которых описана переменная с одним и тем же именем, то они воспринимаются компилятором как две разные локальные переменные и в разных функциях они имеют различные значения. При выходе из функции, значение локальной переменной становится недоступным. О глобальных переменных "знают" несколько функций, если они описаны вне любого определения функций. Значение глобальной переменной сохраняется при переходе от функции к функции. Каждая переменная в программе имеет тип. Кроме того, каждая переменная принадлежит к некоторому классу памяти. Класс памяти позволяет установить два факта. Во-первых, определить, какие функции имеют доступ к переменной. ( Пределы доступности переменной характеризуют ее область действия ). Во-вторых, определить, как долго переменная находится в памяти. В языке Си имеется четыре класса памяти: автоматический, статический, внешний и регистровый. Определение класса памяти переменной зависит от того, где переменная описана и какое ключевое слово используется. Ниже приводится таблица свойств классов памяти.
Класс памяти | Ключевое слово | Продолжительность существования |
Область действия |
Автоматический | auto | Временно | Локальная |
Регистровый | register | Временно | Локальная |
Статический | static | Постоянно | Локальная |
Внешний | extern | Постоянно | Глобальная (все файлы) |
Внешний статический | static | Постоянно | Глобальная (один файл) |