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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

.

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

Наши рекомендации