Оптимизация при компиляции
Хорошие компиляторы стараются оптимизировать машинный код, который они генерируют. Если они видят, что части вашего кода можно заменить более эффективными эквивалентами, они это сделают. Компиляторы порой применяют сотни правил оптимизации, прежде чем произвести двоичный код.
Именно поэтому вам не следует жертвовать простотой чтения кода в пользу его микрооптимизации. Компилятор так или иначе применит все тривиальные оптимизации. Посмотрите на этот фрагмент кода:
function factorial(n)
if n > 1
return factorial(n - 1) * n
else
return 1
Кто-то скажет, что его лучше заменить на этот эквивалент:
function factorial(n)
result ← 1
while n > 1
result ← result * n
n ← n - 1
return result
Да, выполнение процедуры factorial без рекурсии использует меньше вычислительных ресурсов. Но это еще не повод менять программный код. Современные компиляторы автоматически перепишут простые рекурсивные функции. Вот еще один пример:
i ← x + y + 1
j ← x + y
Компиляторы избавятся от повторного вычисления x + y и сделают вот такое преобразование:
t1 ← x + y
i ← t1 + 1
j ← t1
Сосредоточьтесь на написании чистого и ясного программного кода. Если у вас есть проблемы, связанные с производительностью, используйте инструменты профилирования для обнаружения узких мест в вашем программном коде и пробуйте реализовать эти части более умными способами. Не стоит напрасно тратить время на ненужную микрооптимизацию.