Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЛекцииЯзыки прогрИб.doc
Скачиваний:
27
Добавлен:
12.11.2019
Размер:
922.11 Кб
Скачать

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

Классы памяти предназначены для выделения памяти объектам данных (значениям переменных и др.). Класс памяти определяет место хранения объекта памяти: сегмент данных, сегмент стека, регистр процессора, динамическая память (heap – куча).

Для объекта данных класс памяти задает два параметра: область действия (сфера действия) и время жизни.

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

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

В языке C++ можно выделить 6 классов памяти:

  • внешний класс (extern);

  • внешний статический класс (static);

  • автоматический класс (auto);

  • регистровый класс (register);

  • внутренний статический класс (static);

  • динамический класс.

Термин «внешний» говорит, что данные определяются внешним образом по отношению к функциям, т.е. определены и объявлены вне функций. Данные внешнего класса определены в одном файле кодов и объявлены с префиксом extern в других файлах кодов. Определение создает объект данных, т.е. резервирует объекту память и связывает идентификатор с этим объектом, а объявление создает ссылку на этот объект. Префикс extern сообщает, что данные определены где-то в другом файле кодов. Область действия данных внешнего класса – вся программа.

Данные внешнего статического класса памяти определены с префиксом static. Область их действия – только файл, в котором они определены. Объекты данных внешнего и внешнего статического классов памяти хранятся в сегменте данных программы. Поэтому, время жизни таких данных – статическая, т.е. время жизни всей программы. Эти данные называют глобальными. Функции по умолчанию являются внешними, префикс static не обязателен.

Данные автоматического, регистрового и внутреннего статического классов памяти определяются внутри блока. Область их действия – блок, в котором они определены. Класс памяти задается с помощью префиксов. По умолчанию подразумевается auto.

Автоматические объекты данных хранятся в стеке. Они создаются при входе в блок и уничтожаются при выходе. Следовательно, их время жизни – локальное (время жизни блока). Параметры функции имеют автоматический класс памяти.

Регистровые объекты данных хранятся в регистрах процессора, их время жизни – тоже локальное. Этот класс памяти используется для повышения быстродействия программ (например, для счетчиков).

Объекты внутренних статических данных хранятся в сегменте данных. Их время жизни – статическое. Эти объекты создаются однократно и сохраняют свои значения между повторными входами в блок, в котором они определены. Данные автоматического и регистрового классов памяти называют локальными.

Пример скелета программы из двух файлов:

//файл f1.cpp

extern int max; //объявление max, внешний класс памяти

extern float vvod(int);

etxtern void vyvod(float);

char menu();

main()

{…

char ch; //автоматический класс

ch=menu();

}

char menu()

{…

char ch; //автоматический класс

float rez; //автоматический класс

int n=10; //автоматический класс

rez=vvod(n);

vyvod (rez);

…return(ch);

}

//файл f2.cpp

int max; //определение max, внешний класс

static float rez; //внешний статический класс

float vvod(int n)

{…

register int j; //регистровый класс

static float m[max]; //внутренний статический класс

float x; //автоматический класс

return (rez);

}

void vyvod (float y)

{…

static int i; //внутренний статический класс

i++;

register int j; //регистровый класс

}

Контрольные вопросы

  1. Охарактеризуйте структуру программы.

  2. Охарактеризуйте структуру функции.

  3. Перечислите стандартные типы данных.

  4. Перечислите операции над стандартными типами данных.

  5. Что такое указатели?

  6. Чем отличаются ссылки от указателей?

  7. Приведите стандартные библиотеки языка.

  8. Объясните классы памяти.