Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
л.3_Базовые_и_производные_типы.doc
Скачиваний:
6
Добавлен:
04.11.2018
Размер:
327.17 Кб
Скачать

Класс памяти информационного объекта

Класс памяти информационного объекта задает:

  • место его размещения (регистр, стек, сегмент данных, динамическая память и т.п.);

  • время жизни (постоянное или временное):

- объекты с локальной продолжительностью жизни

- объекты со статической продолжительностью жизни

- объекты с динамической продолжительностью жизни

  • область видимости – часть программы, из которой допустим обычный доступ к области памяти, связанной с именем объекта;

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

Класс памяти в С++ может быть установлен:

    • синтаксисом определения (для этих целей используются спецификаторы);

    • расположением в исходном коде;

    • двумя этими факторами.

Спецификаторы класса памяти информационного объекта программы:

    • auto – спецификатор автоматического класса памяти, указывающий на то, что объект располагается в локальной (автоматически распределяемой) памяти и при необходимости инициализируется каждый раз при выполнении оператора; спецификатор используется в операторах определения переменных в теле функций, а также внутри блоков операторов; объекты, имена которых определяются со спецификатором auto, размещаются в локальной памяти непосредственно перед началом выполнения функции или блока операторов; при выходе из блока или при возвращении из функции, соответствующая область локальной памяти освобождается, и все ранее размещённые в ней объекты уничтожаются; таким образом, спецификатор влияет на время жизни объекта (оно локально); спецификатор auto используется редко, поскольку все объекты, определяемые непосредственно в теле функции или в блоке операторов и так по умолчанию располагаются в локальной памяти; вне блоков и функций этот спецификатор не используется;

    • register – ещё один спецификатор автоматического класса памяти; представляет из себя "ненавязчивую просьбу" к транслятору (если это возможно) о размещении значений объектов, объявленных с этим спецификатором в одном из доступных регистров, а не в локальной памяти; если по какой-либо причине в момент начала выполнения кода в данном блоке операторов регистры оказываются занятыми, транслятор обеспечивает с этими объектами обращение, как с объектами класса auto ( очевидно, что в этом случае объект располагается в локальной области памяти);

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

    • stаtic – спецификатор внутреннего статического класса памяти; применяется только(!) к именам объектов и функций и имеет в C++ два значения:

      • первое означает, что определяемый объект располагается по фиксированному адресу (тем самым обеспечивается постоянное время жизни объекта с момента его определения до конца выполнения программы и его инициализация только один раз – при первом выполнении оператора, содержащего его определение);

      • второе означает локальность, т.е. что объект, объявленный со спецификатором static, локален в данном программном модуле (то есть, недоступен из других модулей многомодульной программы) или в классе;

статические переменные могут быть локальными и глобальными, в зависимости от расположения оператора описания; глобальные статические переменные видны только в том файле (модуле), в котором описаны;

.

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