Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

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



Под всякую переменную, используемую в про­грамме, должно быть выделено место в памяти ЭВМ. Выделение памяти может происходить либо на стадии компиляции (компо­новки) программы, либо во время ее выполнения. Существуют 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 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.007 с)...