1) В каких случаях целесообразнее объявлять переменные и функции со спецификаторами auto register extern static? Особенно не понятно когда лучше static а когда auto!
2) Переменная объявлена как register. Если инициализируется указатель на переменную в то время, когда её значение находится в регистрах, то как тогда вычисляется её адрес? (по моему адрес можно вычислить только из оперативной памяти, а не из регистров процессора) . Поправьте меня, если я не прав.
Другие языки программирования и технологии
C++ Объясните пож. на доступном языке про спецификаторы класса памяти. В инете и в книгах слишком заумно. Продолж ниже.
1)
авто - только если тип можно получить при инициализации
регистр - мальнькая, часто используемая переменная
экстерн - ранее определенная переменная
статик - если значение переменной не должно теряться при выходе из блока кода
2)
честно хз. По моему компилятор просто проигнорирует оператор регистр и поместит переменную в ОЗУ.
Чет маилру не дает английские буквы писать)))
авто - только если тип можно получить при инициализации
регистр - мальнькая, часто используемая переменная
экстерн - ранее определенная переменная
статик - если значение переменной не должно теряться при выходе из блока кода
2)
честно хз. По моему компилятор просто проигнорирует оператор регистр и поместит переменную в ОЗУ.
Чет маилру не дает английские буквы писать)))
Класс памяти – это время, в течении которого переменная существует в памяти компьютера.
Помогают компилятору, указывая в какую память стоит помещать данную переменную, для улучшения эффективности программы
.
Они используются для того чтобы указывать область видимости и действия переменных, а также того, будут ли они динамическими (будет ли их адрес меняться в процессе выполнения программы) .
К динамическим относятся auto и register.
• auto. Этот спецификатор автоматического класса памяти указывает на то, что объект располагает-ся в локальной (или автоматически распределяемой) памяти. Он используется в операторах объявле-ния в теле функций, а также внутри блоков операторов. Объекты, имена которых объявляются со спецификатором auto, размещаются в локальной памяти непосредственно перед началом выполнения функции или блока операторов. При выходе из блока или при возвращении из функции (о механизмах вызова функций и возвращения из них речь ещё впереди) , соответствующая область локальной памяти освобождается и все ранее размещённые в ней объекты уничтожаются. Таким образом спецификатор влияет на время жизни объекта (это время локально) . Спецификатор auto используется редко, поскольку все объекты, определяемые непосредственно в теле функции или в блоке операторов и так по умолчанию располагаются в локальной памяти. Вне блоков и функций этот специфика-тор не используется.
• register. Ещё один спецификатор автоматического класса памяти. Применяется к объектам, по умолчанию располагаемым в локальной памяти. Представляет из себя "ненавязчивую просьбу" к транслятору (если это возможно) о размещении значений объектов, объявленных со спецификатором register в одном из доступных регистров, а не в локальной памяти. Если по какой-либо причине в мо-мент начала выполнения кода в данном блоке операторов регистры оказываются занятыми, трансля-тор обеспечивает с этими объектами обращение, как с объектами класса auto. Очевидно, что в этом случае объект располагается в локальной области памяти.
К статическим относятся static и extern.
• static. Спецификатор внутреннего статического класса памяти. Применяется только (!) к именам объектов и функций. В C++ этот спецификатор имеет два значения. Первое означает, что определяе-мый объект располагается по фиксированному адресу. Тем самым обеспечивается существование объекта с момента его определения до конца выполнения программы. Второе значение означает ло-кальность. Объявленный со спецификатором static локален в одном программном модуле (то есть, недоступен из других модулей многомодульной программы) или в классе (о классах - позже) . Может использоваться в объявлениях вне блоков и функций. Также используется в объявлениях, располо-женных в теле функций и в блоках операторов.
• extern. Спецификатор внешнего статического класса памяти. Обеспечивает существование объекта с момента его определения до конца выполнения программы. Объект, объявленный со спецификато-ром extern доступен во всех модулях программы, то есть глобален.
Транслятор определяет класс памяти автоматически.
Помогают компилятору, указывая в какую память стоит помещать данную переменную, для улучшения эффективности программы
.
Они используются для того чтобы указывать область видимости и действия переменных, а также того, будут ли они динамическими (будет ли их адрес меняться в процессе выполнения программы) .
К динамическим относятся auto и register.
• auto. Этот спецификатор автоматического класса памяти указывает на то, что объект располагает-ся в локальной (или автоматически распределяемой) памяти. Он используется в операторах объявле-ния в теле функций, а также внутри блоков операторов. Объекты, имена которых объявляются со спецификатором auto, размещаются в локальной памяти непосредственно перед началом выполнения функции или блока операторов. При выходе из блока или при возвращении из функции (о механизмах вызова функций и возвращения из них речь ещё впереди) , соответствующая область локальной памяти освобождается и все ранее размещённые в ней объекты уничтожаются. Таким образом спецификатор влияет на время жизни объекта (это время локально) . Спецификатор auto используется редко, поскольку все объекты, определяемые непосредственно в теле функции или в блоке операторов и так по умолчанию располагаются в локальной памяти. Вне блоков и функций этот специфика-тор не используется.
• register. Ещё один спецификатор автоматического класса памяти. Применяется к объектам, по умолчанию располагаемым в локальной памяти. Представляет из себя "ненавязчивую просьбу" к транслятору (если это возможно) о размещении значений объектов, объявленных со спецификатором register в одном из доступных регистров, а не в локальной памяти. Если по какой-либо причине в мо-мент начала выполнения кода в данном блоке операторов регистры оказываются занятыми, трансля-тор обеспечивает с этими объектами обращение, как с объектами класса auto. Очевидно, что в этом случае объект располагается в локальной области памяти.
К статическим относятся static и extern.
• static. Спецификатор внутреннего статического класса памяти. Применяется только (!) к именам объектов и функций. В C++ этот спецификатор имеет два значения. Первое означает, что определяе-мый объект располагается по фиксированному адресу. Тем самым обеспечивается существование объекта с момента его определения до конца выполнения программы. Второе значение означает ло-кальность. Объявленный со спецификатором static локален в одном программном модуле (то есть, недоступен из других модулей многомодульной программы) или в классе (о классах - позже) . Может использоваться в объявлениях вне блоков и функций. Также используется в объявлениях, располо-женных в теле функций и в блоках операторов.
• extern. Спецификатор внешнего статического класса памяти. Обеспечивает существование объекта с момента его определения до конца выполнения программы. Объект, объявленный со спецификато-ром extern доступен во всех модулях программы, то есть глобален.
Транслятор определяет класс памяти автоматически.
Регистр -Указывает что переменная будет использоваться как счетчик, такую переменную будет удобно использовать в циклах и подобым образом.
Похожие вопросы
- Начинаю изучать С++. Вопросы про спецификаторы класса памяти.
- Объясните доступным языком, что такое "интерфейс" в ООП
- как разогнать процессор, объясните доступным языком)))
- Объясните плиз доступным языком,как скачивать с торрентов файлы?спасибо огромное
- что такое ассемблер? более доступным языком объясните пожалуйста
- для чего народ подвешивает сайты с помощью Ddos-атак?! зачем??? объясните девушке доступным языком, пожалуйста.
- объясните нубу в этом деле, что такое хостинг, только на доступном языке. например хостинг сервера minecraft
- Стоит ли изучать язык программирования C++ ?И какое преимущество этого языка? Где он мне пригодится ?
- Объясните новичку на простом языке что делает метод Convert.ToInt32 на C#
- C++: в чем принципиальная разница между использованием членов класса и указателей на них?