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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.67
TBIKC
web dev
104 / 91 / 1
Регистрация: 23.09.2010
Сообщений: 738
#1

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

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

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

Зачем он нужен, в чём его плюсы и когда его применять, можно, нужно ?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.08.2011, 23:18     Спецификатор автоматического класса памяти, register
Посмотрите здесь:

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

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

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

Представление класса в памяти - C++
Всем доброго времени суток! Подскажите ка,как класс представляется в памяти?и как представляется структура? Простите за столь...

Освобождение памяти в методе класса - C++
Здравствуйте, В университете дали задание написать написать стек с итератором произвольного доступа. Собственно, класс стека и итератора...

Объект класса в динамической памяти - C++
Привет. Вот листинг: #include <iostream> using namespace std; class SimpleCat { public: SimpleCat(int age, int weight) {...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Jupiter
Каратель
Эксперт С++
6552 / 3972 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
27.08.2011, 23:25     Спецификатор автоматического класса памяти, register #2
http://ru.wikipedia.org/wiki/Регистры_процессора
Thinker
Эксперт C++
4221 / 2195 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
27.08.2011, 23:43     Спецификатор автоматического класса памяти, register #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;
}
TBIKC
web dev
104 / 91 / 1
Регистрация: 23.09.2010
Сообщений: 738
27.08.2011, 23:47  [ТС]     Спецификатор автоматического класса памяти, register #4
А почему, желательнее ?
silent_1991
Эксперт С++
4958 / 3034 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
27.08.2011, 23:49     Спецификатор автоматического класса памяти, register #5
TBIKC, потому что действия с такими переменными выполняются очень быстро. Однако ключевое слово register - всего лишь рекомендация компилятору, по факту объявление переменной с register не обязательно означает, что она действительно будет находиться в регистре. Компилятор сам решит, что делать.
Deviaphan
Делаю внезапно и красиво
Эксперт C++
1286 / 1220 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
28.08.2011, 07:23     Спецификатор автоматического класса памяти, register #6
Цитата Сообщение от TBIKC Посмотреть сообщение
Если по какой-либо причине в момент начала выполнения кода
Распределение по регистрам происходит при компиляции, а не в runtime.
И вообще, лучше забыть про register, компилятор умнее тебя, не пытайся его обмануть.
LosAngeles
Заблокирован
28.08.2011, 07:52     Спецификатор автоматического класса памяти, register #7
Цитата Сообщение от TBIKC Посмотреть сообщение
транслятор обеспечивает с этими объектами обращение, как с объектами класса auto.
у auto скоро появится другое значение. Что как бы намекает на бесполезность рекомендаций компилятору что и как ему хранить
Deviaphan
Делаю внезапно и красиво
Эксперт C++
1286 / 1220 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
28.08.2011, 08:01     Спецификатор автоматического класса памяти, register #8
Цитата Сообщение от LosAngeles Посмотреть сообщение
у auto скоро появится другое значение
Уже появилось.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.08.2011, 12:00     Спецификатор автоматического класса памяти, register
Еще ссылки по теме:

Освобождение памяти от экземпляра класса - C++
есть класс : Message есть контейнер типа : multimap&lt;int,Message&gt; myQueue этот контейнер формируется так Message *c_message = new...

Размещение класса в динамической памяти - C++
Добрый день! Интересует такой вопрос, который я никак не пойму: Есть класс class Container, который создается в динамической памяти. c...

Освобождение памяти в деструкторе класса - C++
Перечитал по этому поводу много информации. Главный вопрос. Есть класс в котором происходит динамическое выделение памяти. В...

Выделение памяти под шаблон класса - C++
Здравствуйте, надеюсь это последняя тема от меня. А то что-то много вопросов последнее время. Очень надеюсь на помощь. Собственно, есть 2...


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

Или воспользуйтесь поиском по форуму:
xAtom
914 / 739 / 60
Регистрация: 09.12.2010
Сообщений: 1,346
Записей в блоге: 1
28.08.2011, 12:00     Спецификатор автоматического класса памяти, register #9
Цитата Сообщение от Thinker Посмотреть сообщение
Это важно, если переменная очень часто используется, например, переменные-счетчики, суммы и т.д. Желательно, чтобы такие переменные находились в машинных регистрах, например:
Ну во-первых регистров РОН не так уж и много для 32-битных( 8 ), когда компилятору не хватит регистров для генерации bin-кода он добавит стек(push, pop) а это уже ОЗУ, но если в процессорном кэше есть место то будет использовать его без обращении к ОЗУ в таком случае выигрыш получиться. Лучше не использовать не поделу модификаторы register, auto, можно только для двух или трёх инструкций.
Yandex
Объявления
28.08.2011, 12:00     Спецификатор автоматического класса памяти, register
Ответ Создать тему
Опции темы

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