Главная Случайная страница Контакты | Мы поможем в написании вашей работы! | ||
|
Под всякую переменную, используемую в программе, должно быть выделено место в памяти ЭВМ. Выделение памяти может происходить либо на стадии компиляции (компоновки) программы, либо во время ее выполнения. Существуют 4 класса памяти, выделяемой под переменные:
• автоматическая (ключевое слово auto);
• внешняя (extern);
• статическая (static);
• регистровая (register).
Под глобальные переменные выделяется место во внешней памяти (не нужно думать, что речь идет о магнитной памяти; это оперативная память класса extern). Глобальную переменную можно объявить либо вне программных блоков, либо внутри блока с ключевым словом extern. Обычно это делается в тех случаях, когда программный модуль хранится в отдельном файле и, следовательно, отдельно компилируется.
Пусть, например, основная и вспомогательная функции хранятся в разных файлах.
Пример 12:
Файл 1:
…
int var
void main ()
{ var=5;
func ();
cout<<var;
}
Файл 2:
void func ()
{ extern int var;
var=10*var;
}
Здесь обмен значениями между основной и вспомогательной функцией func () происходит через общую глобальную переменную var, для которой во время компиляции выделяется место во внешнем разделе памяти. В результате выполнения данной программы на экран выведется число 50.
Локальные переменные, объявленные внутри блоков, распределяются в автоматической памяти, работающей по принципу стека. Выделение памяти происходит при входе выполнения программы в блок, а при выходе из блока память освобождается. Ключевое слово auto писать необязательно (подразумевается по умолчанию).
Статическая память выделяется под переменные, локализованные внутри блока, но в отличие от автоматической памяти не освобождается при выходе из блока. Таким образом, при повторном вхождении в блок статическая переменная сохраняет свое прежнее значение. Пример объявления статической переменной:
f ()
{ static int schet=10;...}
Инициализация статической переменной происходит только при первом вхождении в блок. Если инициализация явно не указана, то переменной автоматически присваивается нулевое начальное значение. Статические переменные можно использовать, например, для организации счетчика числа вхождений в блок.
Регистровая память выделяется под локальные переменные. Регистры процессора - самый быстрый и самый маленький вид памяти. Они задействованы при выполнении практически всех операций в программе. Поэтому возможность распоряжаться регистровой памятью лучше оставить за компилятором.
Дата публикования: 2014-11-02; Прочитано: 376 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!