web dev
107 / 93 / 9
Регистрация: 23.09.2010
Сообщений: 737
|
|
1 | |
Спецификатор автоматического класса памяти, register27.08.2011, 23:18. Показов 2223. Ответов 8
Метки нет (Все метки)
Прочитал:
Register. Ещё один спецификатор автоматического класса памяти. Применяется к объектам, по умолчанию располагаемым в локальной памяти. Представляет из себя "ненавязчивую просьбу" к транслятору (если это возможно) о размещении значений объектов, объявленных со спецификатором register в одном из доступных регистров, а не в локальной памяти. Если по какой-либо причине в момент начала выполнения кода в данном блоке операторов регистры оказываются занятыми, транслятор обеспечивает с этими объектами обращение, как с объектами класса auto. Очевидно, что в этом случае объект располагается в локальной области памяти. Зачем он нужен, в чём его плюсы и когда его применять, можно, нужно ?
0
|
27.08.2011, 23:18 | |
Ответы с готовыми решениями:
8
Про спецификатор Register Оператор -> и спецификатор класса памяти extern Даёт ли какой-нибудь выигрыш спецификатор register? Какой спецификатор доступа элементов класса считается по умолчанию |
Каратель
|
|
27.08.2011, 23:25 | 2 |
0
|
27.08.2011, 23:43 | 3 | |||||
Это важно, если переменная очень часто используется, например, переменные-счетчики, суммы и т.д. Желательно, чтобы такие переменные находились в машинных регистрах, например:
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 |
Распределение по регистрам происходит при компиляции, а не в runtime.
И вообще, лучше забыть про register, компилятор умнее тебя, не пытайся его обмануть.
1
|
Заблокирован
|
|
28.08.2011, 07:52 | 7 |
у auto скоро появится другое значение. Что как бы намекает на бесполезность рекомендаций компилятору что и как ему хранить
0
|
Делаю внезапно и красиво
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
|
|
28.08.2011, 08:01 | 8 |
0
|
28.08.2011, 12:00 | 9 |
Ну во-первых регистров РОН не так уж и много для 32-битных( 8 ), когда компилятору не хватит регистров для генерации bin-кода он добавит стек(push, pop) а это уже ОЗУ, но если в процессорном кэше есть место то будет использовать его без обращении к ОЗУ в таком случае выигрыш получиться. Лучше не использовать не поделу модификаторы register, auto, можно только для двух или трёх инструкций.
1
|
28.08.2011, 12:00 | |
28.08.2011, 12:00 | |
Помогаю со студенческими работами здесь
9
Замена register.php на /register Спецификатор noexcept для класса "исключение" Выделение памяти под массив класса (конструктор класса) Syntax error в Register: <%@ Register TagPrefix="sb" Namespace="SB.WebControls" Assembly="SB.WebControls"%> Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |