Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.55/11: Рейтинг темы: голосов - 11, средняя оценка - 4.55
web dev
107 / 93 / 9
Регистрация: 23.09.2010
Сообщений: 737
1

Спецификатор автоматического класса памяти, register

27.08.2011, 23:18. Показов 2223. Ответов 8
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Прочитал:
Register. Ещё один спецификатор автоматического класса памяти. Применяется к объектам, по умолчанию располагаемым в локальной памяти. Представляет из себя "ненавязчивую просьбу" к транслятору (если это возможно) о размещении значений объектов, объявленных со спецификатором register в одном из доступных регистров, а не в локальной памяти. Если по какой-либо причине в момент начала выполнения кода в данном блоке операторов регистры оказываются занятыми, транслятор обеспечивает с этими объектами обращение, как с объектами класса auto. Очевидно, что в этом случае объект располагается в локальной области памяти.

Зачем он нужен, в чём его плюсы и когда его применять, можно, нужно ?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
27.08.2011, 23:18
Ответы с готовыми решениями:

Про спецификатор Register
Решил испытать register. Есть 2 кода: #include <iostream> #include <ctime> int main() {...

Оператор -> и спецификатор класса памяти extern
Оператор -> Исходя из того, что он вообще был добавлен в язык, можно сделать вывод, что такая...

Даёт ли какой-нибудь выигрыш спецификатор register?
Повстречал его в исходниках одной проги и задался вопросом "зачем он нужен?". На одном сайте...

Какой спецификатор доступа элементов класса считается по умолчанию
1. Какой спецификатор доступа элементов класса считается по умолчанию? 2. Имеют ли методы класса...

8
Каратель
Эксперт С++
6609 / 4028 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
27.08.2011, 23:25 2
http://ru.wikipedia.org/wiki/Регистры_процессора
0
Эксперт С++
4267 / 2241 / 203
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
27.08.2011, 23:43 3
Это важно, если переменная очень часто используется, например, переменные-счетчики, суммы и т.д. Желательно, чтобы такие переменные находились в машинных регистрах, например:

C++
1
2
3
4
5
6
7
8
long Sum(register int n)
{
   register long sum;
   register int i;
   for (i = 0; i < n; i++)
      sum += i;
   return sum;
}
1
web dev
107 / 93 / 9
Регистрация: 23.09.2010
Сообщений: 737
27.08.2011, 23:47  [ТС] 4
А почему, желательнее ?
0
Эксперт С++
5055 / 3115 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
27.08.2011, 23:49 5
TBIKC, потому что действия с такими переменными выполняются очень быстро. Однако ключевое слово register - всего лишь рекомендация компилятору, по факту объявление переменной с register не обязательно означает, что она действительно будет находиться в регистре. Компилятор сам решит, что делать.
1
Делаю внезапно и красиво
Эксперт С++
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
28.08.2011, 07:23 6
Цитата Сообщение от TBIKC Посмотреть сообщение
Если по какой-либо причине в момент начала выполнения кода
Распределение по регистрам происходит при компиляции, а не в runtime.
И вообще, лучше забыть про register, компилятор умнее тебя, не пытайся его обмануть.
1
Заблокирован
28.08.2011, 07:52 7
Цитата Сообщение от TBIKC Посмотреть сообщение
транслятор обеспечивает с этими объектами обращение, как с объектами класса auto.
у auto скоро появится другое значение. Что как бы намекает на бесполезность рекомендаций компилятору что и как ему хранить
0
Делаю внезапно и красиво
Эксперт С++
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
28.08.2011, 08:01 8
Цитата Сообщение от LosAngeles Посмотреть сообщение
у auto скоро появится другое значение
Уже появилось.
0
935 / 760 / 299
Регистрация: 09.12.2010
Сообщений: 1,346
Записей в блоге: 1
28.08.2011, 12:00 9
Цитата Сообщение от Thinker Посмотреть сообщение
Это важно, если переменная очень часто используется, например, переменные-счетчики, суммы и т.д. Желательно, чтобы такие переменные находились в машинных регистрах, например:
Ну во-первых регистров РОН не так уж и много для 32-битных( 8 ), когда компилятору не хватит регистров для генерации bin-кода он добавит стек(push, pop) а это уже ОЗУ, но если в процессорном кэше есть место то будет использовать его без обращении к ОЗУ в таком случае выигрыш получиться. Лучше не использовать не поделу модификаторы register, auto, можно только для двух или трёх инструкций.
1
28.08.2011, 12:00
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
28.08.2011, 12:00
Помогаю со студенческими работами здесь

Замена register.php на /register
Здравствуйте, у меня появился новый вопрос: Как сделать так чтобы вместо register.php было...

Спецификатор noexcept для класса "исключение"
Доброго все дня! Стандартный класс std::exception имеет спецификатор noexcept для всех своих...

Выделение памяти под массив класса (конструктор класса)
Здравствуйте программисты. Не могу понять, почему при использовании объекта класса возникает...

Syntax error в Register: <%@ Register TagPrefix="sb" Namespace="SB.WebControls" Assembly="SB.WebControls"%>
Народ, помогите плз. чего ему не нравиться? &lt;%@ Register TagPrefix=&quot;sb&quot; Namespace=&quot;SB.WebControls&quot;...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru