Что такое хороший пример использования регистровой переменной в C?

32
задан 4 revs, 3 users 82% 23 January 2015 в 11:16
поделиться

3 ответа

Нет никакого хорошего примера использования регистра при использовании современных компиляторов (чтение: последние 15 + годы), потому что это почти никогда не приносит пользы и может сделать некоторых плохо. При использовании регистра Вы говорите компилятору, что "Я знаю, как оптимизировать мой код лучше, чем Вы делаете", который почти никогда не имеет место. Одна из трех вещей может произойти при использовании регистра:

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

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

69
ответ дан 27 November 2019 в 20:01
поделиться

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

, Но в 99% случаев объяснение Roberts, хорошее для встроенного слова также.

12
ответ дан 27 November 2019 в 20:01
поделиться

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

См. vmgen — генератор эффективных интерпретаторов виртуальной машины для примера оптимизации (5.2 Вершин кэширования стека).

3
ответ дан 27 November 2019 в 20:01
поделиться
Другие вопросы по тегам:

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