Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву
Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Автоматические переменные. Классы хранения 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; просмотров: 414; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 216.73.216.10 (0.007 с.) |