В семидесятые годы, в самом начале языка Си, было введено ключевое слово register, чтобы позволить программисту давать подсказки компилятору, сообщая ему, что переменная будет использоваться очень часто и что она должна разумно сохранить это значение во внутреннем регистре процессора.
В настоящее время оптимизаторы гораздо эффективнее, чем программисты, определяют переменные, которые с большей вероятностью будут храниться в регистрах, и оптимизатор не всегда учитывает подсказку программиста.
Так много людей ошибочно рекомендуют не использовать ключевое слово register.
Посмотрим почему!
Ключевое слово register имеет связанный побочный эффект: вы не можете ссылаться (получить адрес) на переменную типа регистра.
Люди, советующие другим не использовать регистры, ошибочно воспринимают это как дополнительный аргумент.
Однако тот простой факт, что вы не можете получить адрес переменной регистра, позволяет компилятору (и его оптимизатору) знать, что значение этой переменной нельзя изменить косвенно через указатель.
Когда в определенной точке потока команд значение переменной регистра присваивается в регистре процессора, и регистр не используется, поскольку для получения значения другой переменной компилятор знает, что ему не нужно перезагрузите значение переменной в этом регистре.
Это позволяет избежать дорогостоящего бесполезного доступа к памяти.
Проведите собственные тесты, и вы получите значительное улучшение производительности в самых внутренних циклах.
c_register_side_effect_performance_boost