Подтвердить что ты не робот

Сколько плохих можно сделать, используя регистровые переменные в С++

Я только узнал, что мы можем использовать регистры, явно в программах на С++. Интересно, что, если я объявляю и использую все доступные регистры в одной программе на С++ и запускаю ее в течение значительного времени. Как плохо будет работать моя система и какие (если есть) меры будут приняты os, чтобы выйти из ситуации.

4b9b3361

Ответ 1

Ключевое слово register указывает компилятору, что переменная не нуждается в адресации в основной памяти. Таким образом, компилятор может быть уверен, что нет указателей на значение и оптимизировать соответственно.

Чрезмерное использование ключевого слова register вряд ли окажет серьезное негативное влияние на современные системы. Каждый поток сохраняет свои собственные значения регистра во время выполнения, и его использование в регистре не будет иметь прямого влияния на другие потоки. Компилятор либо отклонит, либо проигнорирует использование регистров, что не может привести к жизнеспособной программе. Плохое использование реестра, по большей части, просто снизит производительность, и ОС не предпримет особых действий.

Ответ 2

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

Ответ 3

Для вашей программы на С++ доступно только определенное количество регистров.

Кроме того, это просто предложение для компилятора, в основном компиляторы могут сами сделать эту оптимизацию, поэтому на самом деле использование ключевого слова register не так уж сильно, потому что компиляторы могут или не могут следовать этому предложению.

Таким образом, единственное ключевое слово register с современными компиляторами не позволяет вам использовать &, чтобы принять адрес переменной.

Ответить Цитата Herb Sutter на это:
Никогда не записывайте регистр. Это точно так же значимо, как пробел

Ответ 4

Ключевое слово register - только предложение компилятору и его можно игнорировать. Пусть компилятор сделает для вас оптимизацию.

Ответ 5

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

register - это в основном остаточный остаток старых, крайне неэффективных компиляторов C, которые были доступны обратно. (Те же самые компиляторы, которые на самом деле приводили к таким искажаемым Duff Device и другим чудовищам.) Современные компиляторы гораздо более эффективны, чем вы следите за тем, какие переменные должны быть помещены в регистры, в которых точки исполнения. Таким образом, они будут вежливо игнорировать вас, не сказав ни слова.

Ответ 6

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

Это хуже, чем бессмысленно.

Я видел код, где переменная, квалифицированная с помощью регистра, позже используется с "&". Код с десятками и десятками переменных, имеющих квалификацию с регистром. И конечная doozy, "regatile volatile foo;"

Никогда не используйте "register".

Ответ 7

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