Операционная система UNIX. Руководство программиста

     

Спецификаторы класса памяти


Спецификаторы класса памяти имеют вид:

спецификатор_класса:

auto static extern register typedef

Спецификатор typedef причислен к спецификаторам_класса только для удобства описания синтаксиса; память он не резервирует (см. дополнительную информацию в пункте Определяемые типы). Смысл различных классов памяти обсуждается в пункте Имена типов.

Описания auto, static и register служат также и определениями, поскольку они вызывают выделение соответствующего объема памяти. Если в некоторой функции при описании каких-либо идентификаторов используется спецификатор extern (см. ВНЕШНИЕ ОПРЕДЕЛЕНИЯ), где-то вне этой функции должно быть указано их внешнее определение.

Описание register лучше всего понимать как описание auto вместе с указанием компилятору, что описанные переменные будут интенсивно использоваться. В каждой функции эффективными будут лишь несколько первых из подобных описаний. Более того, в регистрах можно разместить переменные только некоторых типов. Еще одно ограничение, касающееся переменных, описанных с использованием класса памяти register, состоит в том, что к ним нельзя применять операцию вычисления адреса &. Можно надеяться, что программы при разумном использовании описаний register будут несколько меньше и быстрее.

В описании может быть задано не более одного спецификатора_класса памяти. Если спецификатор_класса опущен, он считается равным auto внутри функции и extern - вне. Исключение: функции не могут быть автоматическими.



Содержание раздела