Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Автоматические переменные. Классы хранения auto и register

Поиск

 

Большинство переменныхпрограммы на С++ – это переменные, отнесенные к классу хранения auto или автоматические переменные. Автоматические переменные – это всегда локальные переменные, но не наоборот. Автоматические переменные располагаются в стеке или внутренних регистрах процессора. В этой связи время, в течение которого определено их значение (время существования), ограничено временем выполнения функции или блока, в котором эти переменные описаны. Автоматические переменные должны явно инициализироваться, иначе содержимое ячеек памяти, выделенное для них, не будет определено.

Частным случаем автоматических переменных являются переменные, описанные с указанием ключевого слова register. Так могут описываться отдельные переменные целых типов и указатели, но это неприменимо для массивов, структур, объединений и переменных с плавающей точкой. Задание ключевого слова register – это указание компилятору выделить для хранения переменных не ячейки стека, а внутренние регистры процессора. Если свободных регистров нет, таким переменным будут отведены ячейки в стеке. Использование класса хранения register позволяет повысить скорость выполнения программы. Однако того же результата можно добиться и задавая опции компилятору.

 

Статические переменные. Класс хранения static

 

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

По умолчанию все объекты, отнесенные к статической памяти, будут инициализироваться нулевыми байтами. Если при описании статической переменной ей присваивается начальное значение, то это значение «впечатывается» в ячейки памяти, выделенные для переменной. Затем при загрузке программы инициализирующие статический объект байты переносятся в оперативную память компьютера.

Приведем пример программы с использованием статических переменных с локальной областью определения:

/* Prim7_3.cpp */

#include <stdio.h>

void example(int);

void main(void)

{

int count;

for(count = 9; count >= 5; count -=2)

example(count);

}

void example(int c)

{

int f = 1; static int stat = 1;

printf("c = %d, f = %d, stat = %d\n", c, f, stat);

stat++; f++;

}

При выполнении программы будут получены следующие результаты:

c = 9, f = 1, stat = 1

c = 7, f = 1, stat = 2

c = 5, f = 1, stat = 3

Обратите внимание на то, что значение статической переменной stat после выхода из функции example() не «забывается», как это имеет место для переменной f. Переменная f – автоматическая переменная, которой при каждом вхождении в функцию вновь присваивается значение 1. Инициализация же статической переменной stat производится только однажды – при загрузке программы.

Статические объекты невидимы из других функций и не могут этими функциями модифицироваться. Это дает возможность создавать функции-«менеджеры» ресурса: менеджеры очередей, менеджеры памяти и пр. Для доступа к ресурсу обязательно требуется вызов менеджера, так как управляемый ресурс невидим из других функций.

И, наконец, объекты с динамическим временем жизни создаются и разрушаются специальными функциями динамического управления памятью при выполнении программы. Физически динамические объекты располагаются в специально зарезервированной области памяти, называемой «куча» (heap).

 

Структуры, объединения и перечисления

 

Общие положения

 

Структуры и объединения – это один из примеров составных типов данных, называемых агрегатными типами, или просто агрегатами.

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

Объединения подобны структурам в том, что содержат поля различных типов, но помещаемые в одно и то же место памяти. Фактически объединения – это доступ к одному и тому же месту памяти, но по разному.

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

 



Поделиться:


Последнее изменение этой страницы: 2017-02-05; просмотров: 345; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.129.210.35 (0.005 с.)