Язык С

       

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


Ниже перечисляются спецификаторы класса памяти: Спецификатор-класса-памяти: AUTO STATIC EXTERN REGISTER TYPEDEF

Спецификатор TYPEDEF не реализует памяти и называется "спецификатором класса памяти" только по синтаксическим со- ображениям; это обсуждается в п. 16.8. Смысл различных клас- сов памяти был обсужден в п. 12. Описания AUTO, STATIC и REGISTER служат также в качестве определений в том смысле, что они вызывают резервирование нужного количества памяти. В случае EXTERN должно присутст- вовать внешнее определение (п. 18) Указываемых идентификато- ров где-то вне функции, в которой они описаны.

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



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