Язык программирования C

       

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


Ниже перечисляются спецификаторы класса памяти:

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

  • auto
  • static
  • extern
  • register
  • typedef

Спецификатор typedef не реализует памяти и называется "спецификатором класса памяти" только по синтаксическим соображениям. Смысл различных классов памяти был обсужден выше.

Описания auto, static и register служат также в качестве определений в том смысле, что они вызывают резервирование нужного количества памяти. В случае extern должно присутствовать внешнее определение. Указываемых идентификаторов где-то вне функции, в которой они описаны.

Описание register лучше всего представлять себе как описание auto вместе с намеком компилятору, что описанные таким образом переменные будут часто использоваться. Эффективны только несколько первых таких описаний. Кроме того, в регистрах могут храниться только переменные определеных типов; на PDP-11 это int, char или указатель. Существует и другое ограничение на использование регистровых переменных: к ним нельзя применять операцию взятия адреса &. При разумном использовании регистровых описаний можно ожидать получения меньших по размеру и более быстрых программ, но улучшение в будущем генерирования кодов может сделать их ненужными.

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



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