Почему нам нужно предложить переменную для хранения в регистре? - PullRequest
2 голосов
/ 30 сентября 2010

Как я знаю, в C мы могли бы использовать ключевое слово "register", чтобы предложить компилятору, что переменная должна храниться в регистре CPU.Не правда ли, что все переменные, которые задействованы в инструкциях ЦП, будут в конечном итоге сохранены в регистрах ЦП для выполнения?

Ответы [ 4 ]

5 голосов
/ 30 сентября 2010

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

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

4 голосов
/ 30 сентября 2010

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

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

Не правда ли, что все переменные, которые задействованы в инструкциях ЦП, будут в конечном итоге сохранены в регистрах ЦП для выполнения?

Да, это правда.Но регистры процессора ограничены, поэтому переменные обычно загружаются / хранятся из «нормальной» памяти и живут в регистре только кратко.Ключевое слово register - это (был) способ указания переменных с высоким приоритетом, которые должны занимать регистр дольше.Как i в for(i = 0; ...).

1 голос
/ 30 сентября 2010

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

Оптимизация компиляторов стала настолько лучше, что ключевое слово register не очень полезно. На самом деле, если ваш компилятор уважает его вообще (а многие этого не делают), он может даже испортить вас (связывая руки компилятору, делая невозможными определенные оптимизации). Так что в наши дни это довольно плохая идея.

1 голос
/ 30 сентября 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...