Студопедия
Главная страница | Контакты | Случайная страница

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатика
ИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханика
ОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторика
СоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансы
ХимияЧерчениеЭкологияЭкономикаЭлектроника

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

Читайте также:
  1. I. Классы неорганических соединений. Реакции в растворах электролитов.
  2. БЖ как наука. Понятие опасность, классы опасности. Прогнозирование опасности. Риск и его понятия, анализ и оценка риска. Анализ города как источника опасности
  3. Билет №17 Этап синтеза. Распределение памяти. Генерация кода. Оптимизация кода.
  4. Билет №22: Понятие памяти. Структура памяти
  5. Виды и типы памяти. Воспроизведение. Забывание как психологическая проблема. Кривая забывания Эббингауза. Позиционная кривая воспроизведения.
  6. Виды памяти.
  7. Виды памяти.
  8. Виды памяти.
  9. Виды памяти. Временная организация памяти.
  10. Виды прижизненной памяти.

Каждая переменная и функция в программе на языке Си принадлежит к какому-либо классу памяти. Класс памяти переменной определяет время ее существования (время жизни) и область видимости (область определения), связанные с понятием блока программы (сколько времени и где существует).

Различают четыре класса памяти:

auto, register, extern, static.

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

Автоматическая переменная (auto) – это всегда локальная переменная, но не наоборот, т.е. видима (существует) от точки ее объявления и до конца блока, в котором она объявлена, кроме вложенных блоков, в которых эта переменная определяется повторно. Память для нее выделяется при входе в блок (автоматически) и освобождается (автоматически) при выходе из блока.

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

Регистровая переменная (register) – это автоматическая переменная. Ключевое слово register – лишь указывает компилятору. Что такую переменную рекомендуется разместить не в оперативной памяти, а одном из регистров, если это возможно, что приводит к уменьшению времени выполнения программы. Так могут объявляться отдельные переменные целых типов и указатели типа near. Но это неприменимо для массивов, структур, объединений и переменных с плавающей точкой.

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

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

 




Дата добавления: 2015-02-16; просмотров: 141 | Поможем написать вашу работу | Нарушение авторских прав




lektsii.net - Лекции.Нет - 2014-2025 год. (0.007 сек.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав