Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
KL_PrJAVU230200.doc
Скачиваний:
23
Добавлен:
17.03.2015
Размер:
702.46 Кб
Скачать

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

Любая переменная или функция относится к какому-либо классу памяти. Класс памяти задается по умолчанию местом объявления переменной в программе или явно, с помощью ключевого слова, которое пишется в начале оператора объявления типа. Класс памяти определяет время жизни и область действия переменной.

Время жизни переменной – это то время выполнения программы, когда переменная сохраняет свое значение в оперативной памяти.

Область действия – это та часть программы, где переменная доступна по имени.

Существуют следующие классы памяти:

  • extern – внешний класс.

  • auto – автоматические переменные.

  • register – регистровая переменная.

  • static – статические переменные.

1. Внешние переменные.

Переменная считается внешней, если она описана вне любой функции. Область действия внешней переменной вся программа. Время жизни внешней переменной время выполнение всей программы. Внешняя переменная обнуляется. Если программа состоит из нескольких файлов, то в одном файле переменная объявляется, а в других она описывается со словом extern, что является всего лишь напоминанием того, что внешняя переменная объявлена в другом файле.

2. Переменные автоматического класса.

Класс памяти задается по умолчанию. Если переменная объявлена в начале какого-либо блока, она принадлежит автоматическому классу. Область действия – блок, в котором она описана, время жизни – время выполнения блока. Память под переменную выделяется динамически при входе в блок и освобождается при выходе из блока. Переменная не обнуляется. Если наряду с автоматической переменной объявлена внешняя с тем же именем, то внешняя переменная маскируется на время выполнения блока и является недоступной.

3. Регистровые переменные.

Класс задается явно с помощью ключевого слова в операторе описания типа. Установка этого класса является, скорее всего, рекомендацией, которую машина может не выполнить. Память под переменной машина выделяет прямо в регистрах процессора, что ускоряет время доступа к переменной. Свойства такие же, как и у автоматического класса.

4. Статистические переменные.

Класс памяти задается явно с помощью ключевого слова, но в зависимости от места описания переменной, она может быть внешняя статическая или локальная статическая. Статические переменные обнуляются (все). Время жизни внешней переменной вся программа. Область действия файл, в котором описана переменная. У локальной статистической переменной время жизни вся программа, область действия – блок, где описана переменная.

Вывод: Имя переменной не уникальная характеристика. Переменная с одним и тем же именем, объявленная в разных частях программы - это различные переменные. Они могут «жить», но быть недоступными по имени.

Обмен данными между функциями через внешние переменные.

Внешняя переменная доступна из любой части программы, в том числе из другой функции. Использование внешних переменных делает функцию не универсальной, она теряет свою независимость, а это основные свойства функций. При широком использовании внешних переменных затруднена отладка программы, поскольку неизвестно какая именно функции изменила внешнюю переменную.

Использование свойств статистических переменных при написании функции.

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

Пример:

#include<iostream> //подключение системных средств для

using namespace std; //возможности использовать потоки ввода-вывода

void func (void);

void main (void)

{

int i;

for(i=0;i<5;i++)

func ();

return;

}

void func(void)

{

int a=0;

static int b=0;

cout<<a<<endl<<b<<endl; //а равна всегда 0, b растет на 1

a++;

b++;

return;

}

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]