Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 69, средняя оценка - 4.86
Егорка47
7 / 6 / 1
Регистрация: 26.10.2010
Сообщений: 249
#1

Ключевое слово register - C++

20.01.2011, 18:35. Просмотров 9361. Ответов 9
Метки нет (Все метки)

локальная переменная которая задается :
C++
1
register int a;
так же будет локальной и сохраняется в регистр если есть свободное место. но зачем нам это надо?
почему нельзя воспользоваться auto?
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.01.2011, 18:35
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Ключевое слово register (C++):

Ключевое слово "register" - C++
По-тихоньку с чистого Си перехожу на плюсы и хотелось бы понять, теряю ли я что-то, объявляя переменную как register. То есть теперь у меня...

Определить, в введенном предложении слово, которое состоит из тех же букв, что и заданное ключевое слово. - C++
Ввести предложения и ключевое слово. Определить, в введенном предложении слово, которое состоит из тех же букв, что и заданное ключевое...

Ключевое слово this - C++
Можно какой-нибудь простой пример, чтобы понять зачем это нужно?

Ключевое слово this - C++
В данный момент читаю книгу по Java, но и по С++ это тоже встречалось, хотя описание было не сильно понятно. Вопрос следующий, что делает...

Ключевое слово try - C++
Вот вчера печатал программу и нечаяно поставил вместо слова tru слово try и оно выделелось жырным шрифтом.А в моем компиляторе все ключевые...

Ключевое слово static - C++
Здорова господа!!! Есть две функции f1() и f2(). #include <iostream> using std::cout; using std::endl; int& f1() ...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
ForEveR
В астрале
Эксперт С++
7972 / 4734 / 321
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
20.01.2011, 18:40 #2
Егорка47, Для экономии памяти, очевидно же. И да кстати. Про auto можно забыть. В С++0x у него будет совсем другое значение
0
Егорка47
7 / 6 / 1
Регистрация: 26.10.2010
Сообщений: 249
20.01.2011, 18:50  [ТС] #3
Цитата Сообщение от ForEveR Посмотреть сообщение
очевидно же
для меня нет)
спасибо.
0
fasked
Эксперт С++
4936 / 2516 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
20.01.2011, 19:00 #4
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от ForEveR Посмотреть сообщение
Для экономии памяти, очевидно же
А я бы сказал, что для уменьшения времени обращения к переменной.
Если переменная хранится в машинном регистре, а не в оперативной памяти, то доступ к ней осуществляется гораздо быстрее. В некоторых моментах скорость бывает критична, так что определение register можно использовать для переменных, которые часто бывают задействованы в вычислениях.
Однако, для большинства десктопных приложений это не существенно.
3
ForEveR
В астрале
Эксперт С++
7972 / 4734 / 321
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
20.01.2011, 19:03 #5
fasked, Ну да. И + большие переменные не стоит объявлять register.
0
alex_x_x
бжни
2447 / 1652 / 84
Регистрация: 14.05.2009
Сообщений: 7,162
20.01.2011, 19:23 #6
переменные вообще не стоит объявлять как register, ибо компиляторы доросли до такого уровня, что сами знают куда лучше что положить
4
sfinexer
-6 / 8 / 2
Регистрация: 22.01.2011
Сообщений: 152
28.09.2015, 19:03 #7
Про рестисрты с другого форума, ваши коментарии

Это от полного непонимания значения самого слова регистр. В проце много всяких регистров. Есть и такие которые хранят переменную, а в основном там УПРАВЛЯЮЩИЕ регистры. Которые управляют самим процем. Много слов было сказано про пространство памяти задачи- а физически память одна и пространство одно. Просто есть регистр, в котором всего лишь один битик решает- этот код ядра, а этот код юзера. И соответственно проц что то может делать а что то нет.
Но когда задачи переключаются от ядра к юзеру- надо где то сохранять статус задачи, именно этот битик и сохраняеттся он в стэке, а стэк доступен юзеру. иначе он не смог бы возвратить управление ядру.
Есть разные фокусы по отгрызанию стэка- когда из него выгрызается слово состояния и меняется на состояние с большими правами- а дальше само ядро записывает это слово в регистр управления.
Вот таким образом юзер, не имеющий доступа к регистру управления, может поменять там битик на нужный.
0
castaway
28.09.2015, 19:08
  #8

Не по теме:

Цитата Сообщение от sfinexer Посмотреть сообщение
Про рестисрты
И откуда только у тебя отрицательная "репа"...

0
lod
0 / 0 / 0
Регистрация: 23.02.2016
Сообщений: 2
29.05.2017, 12:51 #9
Цитата Сообщение от fasked Посмотреть сообщение
А я бы сказал, что для уменьшения времени обращения к переменной.
Если переменная хранится в машинном регистре, а не в оперативной памяти, то доступ к ней осуществляется гораздо быстрее. В некоторых моментах скорость бывает критична, так что определение register можно использовать для переменных, которые часто бывают задействованы в вычислениях.
Однако, для большинства десктопных приложений это не существенно.
Мне кажется, что с появлением встроенного в процессор кэша, который работает с такой же скоростью как регистры, утверждение о том что переменные в регистрах быстрее переменных в стеке теряет актуальность.

Ещё следует учесть, что в IA-32 есть только 8 регистров общего назначения (EAX, EBX, ECX, EDX, ESP, EBP, ESI, EDI), и когда один из этих регистров пригодится для других целей то переменная переменная будет записана в стек. Если из функции с регистровыми переменными вызываются другие функции, то скорее всего этим переменным не удастся остаться регистровыми и они будут записаны в стек.

Насчёт экономии памяти, затрудняюсь её рассмотреть. У нас есть 8 регистров по 4 байта, итого мы можем "сэкономить" по 32 байта для каждого потока выполнения, то есть для обычной однопоточной программы мы "сэкономим" не более чем 32 байта на всю программу, сомнительная экономия, даже для времён 640КБ.
Экономия памяти в стеке может потребоваться при рекурсии, но как раз в случае рекурсии регистровые переменные никак не помогут.

Современные компиляторы, могут самостоятельно выбрать между стеком и регистрами и даже решить в каком порядке считать, если порядок не влияет на результат.

Считаю что на современных процессорах, при использовании современных компиляторов нет смысла использовать ключевое слово register при объявлении переменных.
0
MasterOfAlteran
44 / 23 / 8
Регистрация: 21.05.2017
Сообщений: 77
29.05.2017, 13:08 #10
Цитата Сообщение от lod Посмотреть сообщение
Считаю что на современных процессорах, при использовании современных компиляторов нет смысла использовать ключевое слово register при объявлении переменных.
Языком стандарта глаголит истина:
A register specifier is a hint to the implementation that the variable so declared will be heavily used.
[ Note: The hint can be ignored and in most implementations it will be ignored if the address of the variable is taken. This use is deprecated (see D.2). —end note ]
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.05.2017, 13:08
Привет! Вот еще темы с ответами:

Ключевое слово noexcept - C++
Прочитал про noexcept и понял, что его нужно использовать для тех методов, которые не бросают исключение, что бы компилятор не генерировал...

Ключевое слово virtual - C++
Что означает ключевое слово virtual в списке базовых классов при декларации класса для случая множественного наследования?

Ключевое слово inline - C++
Доброго времени суток! Какая разница между __inline _inline и inline? Ориентируюсь на компилятор visual c++ 2008.

Ключевое слово export - C++
В стандарте C++ встречается ключевое слово export, если кому-то приходилось реально использовать его в коде, то приведите пожалуйста пример...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
29.05.2017, 13:08
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru