Когда кто-то говорит о спецификаторе класса хранения переменных, о чем они говорят?
Они также часто говорят о переменной связи в том же контексте, что это?Что такое привязка переменных и спецификатор хранилища?
ответ
Спецификация класса хранения управляет хранением и ссылкой ваших переменных. Это два разных понятия. C указывает следующие спецификаторы для переменных: auto, extern, register, static.
хранения
Продолжительность хранения определяет, как долго ваша переменная будет жить в памяти.
Существует три типа хранения: статические, автоматические и динамические.
статический
Если переменная объявлена в области видимости файла, или с экстерном или статическим спецификатором, он будет иметь статическую память. Переменная будет существовать до тех пор, пока выполняется программа. Для создания этих переменных не затрачивается время выполнения.
автоматические
Если переменная объявлена в функции, но без экстерном или статический спецификатора, он имеет автоматическое хранение. Переменная будет существовать только во время выполнения функции. Как только вы вернетесь, переменная больше не существует. Автоматическое хранение обычно выполняется в стеке. Это очень быстрая операция для создания этих переменных (просто увеличивайте указатель стека на размер).
динамический
Если вы используете таНос (или новый в C++) вы используете динамическое хранение. Это хранилище будет существовать до тех пор, пока вы не позвоните бесплатно (или удалите). Это самый дорогой способ создания хранилища, поскольку система должна управлять динамическим распределением и освобождением памяти.
Рычажного
Рычажные определяет, кто может видеть и ссылаться на переменном. Существует три типа связей: внутренняя связь, внешняя связь и отсутствие связи.
no linkage
Эта переменная видна только там, где она была объявлена. Обычно применяется к переменным, объявленным в функции.
внутренняя связь
Эта переменная будет видна всем функциям внутри файла (называемого translation unit), но и другие файлы не будут знать, что существует.
внешняя связь
Переменная будет видна другим единицам перевода. Их часто называют «глобальными переменными».
Ниже приведена таблица с описанием характеристик хранения и сцепления на основе спецификаторов
Storage Class Function File Specifier Scope Scope ----------------------------------------------------- none automatic static no linkage external linkage extern static static external linkage external linkage static static static no linkage internal linkage auto automatic invalid no linkage register automatic invalid no linkage
Переменные классы хранения или спецификаторов типа (например, летучего, авто и статический) определяют, как/где переменные сохраняются во время выполнения программы. Например, переменные, определенные в функциях, обычно сохраняются в стеке, что означает, что они будут потеряны после возвращения функции. Используя ключевое слово «static», вы можете заставить компилятор помещать переменную в сегмент данных в памяти, делая содержимое переменных постоянным между вызовами этой функции. Ключевое слово «register» заставит компилятор максимально стараться поместить переменную в регистр CPU, полезную для счетчиков в циклах и т. Д. Однако не гарантируется, что он фактически находится в регистре в конце концов.
Подробнее о спецификаторах типов here.
- 1. Что такое спецификатор вложенных имен?
- 2. Что такое спецификатор-список-определитель?
- 3. Что такое «привязка верхнего уровня»?
- 4. Что такое привязка?
- 5. Что такое «инкрементная привязка»?
- 6. Что такое буфер хранилища?
- 7. Что такое языковая привязка?
- 8. Что такое привязка данных?
- 9. Что такое спецификатор формата для `long double`
- 10. Что такое спецификатор формата% n в C?
- 11. Что такое спецификатор доступа класса реализации jsp?
- 12. Что такое спецификатор формата printf для bool?
- 13. Что такое хранилища, службы и действия/контроллеры?
- 14. Что такое декларативная привязка данных?
- 15. Что такое анонимная привязка LDAP?
- 16. Что такое использование хранилища сеансов?
- 17. Зарегистрировать спецификатор хранилища в C++
- 18. Что такое фактическое использование переменных переменных?
- 19. Что такое имена переменных аналитики?
- 20. что такое? на groovy переменных?
- 21. Что означает спецификатор формата% * s?
- 22. Что такое двухсторонняя привязка данных в WPF?
- 23. Что такое привязка '\ G' в regex?
- 24. Что такое двусторонняя привязка данных в угловом
- 25. Что такое двухсторонняя привязка данных в ASP.NET?
- 26. Что такое хранилища сеансов в базе данных?
- 27. Что такое максимальный размер хранилища IIS7?
- 28. Что такое ограничение хранилища для github.com
- 29. Что такое «привязка» к индексам в СУБД?
- 30. Что такое использование хранилища db как dashDb?
Возможно, необходимо добавить дополнительную детализацию на единицы перевода, поскольку они не просто файлы ... они являются исходными файлами и любыми заголовками, включенными в них (хотя и косвенно). – workmad3 2008-09-18 19:21:05
Wow ... +1. Обратите внимание, что «auto» изменит свой смысл на C++ 0x: http://en.wikipedia.org/wiki/C%2B%2B0x – paercebal 2008-09-18 19:49:20