ключевое слово “регистра” в C?

В List есть стирание типов, но класс Object не имеет ничего общего с Java Generics и стиранием типов.

То же самое произойдет без использования дженериков вообще.

Например:

Animal a = new Tiger(); 
System.out.println(a.getClass()); 

также распечатает тигра.

255
задан Sathish 7 August 2014 в 19:36
поделиться

8 ответов

Это - подсказка к компилятору, что переменная будет в большой степени использоваться и что Вы рекомендуете, чтобы это было сохранено в регистре процессора, если это возможно.

самые современные компиляторы делают это автоматически и лучше в выборе их, чем мы люди.

324
ответ дан Qix 23 November 2019 в 02:46
поделиться

На поддерживаемых компиляторах C это пытается оптимизировать код так, чтобы значение переменной было сохранено в фактическом регистре процессора.

1
ответ дан Dana Holt 23 November 2019 в 02:46
поделиться

Регистр уведомил бы компилятор, что кодер полагал, что эта переменная будет писаться/читаться достаточно для выравнивания по ширине ее устройства хранения данных в одном из нескольких регистров, доступных для переменного использования. Чтение/запись из регистров обычно быстрее и может потребовать меньшего набора кода операции.

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

2
ответ дан billjamesdev 23 November 2019 в 02:46
поделиться

Это не было релевантно в течение по крайней мере 15 лет, поскольку оптимизаторы принимают лучшие решения относительно этого, чем Вы можете. Даже когда это было релевантно, это имело намного больше смысла на архитектуре ЦП с большим количеством регистров, как SPARC или M68000, чем это сделало на Intel с его недостатком регистров, большинство которых резервируется компилятором в его собственных целях.

16
ответ дан Paul Tomblin 23 November 2019 в 02:46
поделиться

Это говорит компилятору пытаться использовать регистр ЦП, вместо RAM, сохранить переменную. Регистры находятся в ЦП и намного быстрее к доступу, чем RAM. Но это - только предложение к компилятору, и это не может выполнить.

32
ответ дан Andrew Barnett 23 November 2019 в 02:46
поделиться

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

Настолько использующий register Вы ничего не выигрываете (так или иначе, компилятор решит для себя, куда поместить переменную), и проиграйте & оператор - никакая причина использовать его.

63
ответ дан twk 23 November 2019 в 02:46
поделиться

Вы смешиваете со сложным окрашивающим график алгоритмом компилятора. Это используется для выделения регистра. Ну, главным образом. Это действует как подсказка к компилятору - это правда. Но не проигнорированный в целом, так как Нельзя взять адрес регистровой переменной (помнят, компилятор, теперь на Вашем милосердии, попытается действовать по-другому). Который способом говорит Вам не использовать его.

ключевое слово использовалось долго, длинная спина. Когда было только так мало регистров, которые могли считать их всех использованием Вашего указательного пальца.

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

4
ответ дан dirkgently 23 November 2019 в 02:46
поделиться

Фактически, register сообщает компилятору, что переменная не имеет псевдонима с что-либо еще в программе (даже не char).

Это может быть использовано современными компиляторами в различных ситуациях и может немного помочь компилятору в сложном коде - в простом коде компиляторы могут понять это на своих own.

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

12
ответ дан 23 November 2019 в 02:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: