Оптимизация может происходить на разных уровнях детализации, от очень высокого уровня до очень низкого уровня:
Начните с хорошей архитектуры, слабой связи, модульности и т. Д.
Выберите правильные структуры данных и алгоритмы для задачи.
Оптимизация для памяти, пытаясь разместить больше кода / данных в кеше. Подсистема памяти работает в 10-100 раз медленнее, чем центральный процессор, а если ваши данные переносятся на диск, это в 1000-10000 раз медленнее. Осторожность в отношении потребления памяти, скорее всего, даст большую выгоду, чем оптимизация отдельных инструкций.
В каждой функции используйте соответствующие операторы управления потоком. (Переместите неизменяемые выражения за пределы тела цикла. Сначала укажите наиболее распространенное значение в переключателе / регистре и т. Д.)
В каждом утверждении используйте наиболее эффективные выражения, дающие правильный результат. (Умножение на сдвиг и т. Д.)
Проницательный выбор того, использовать ли выражение деления или выражение сдвига, не является обязательно преждевременной оптимизацией. Это преждевременно, если вы сделаете это без предварительной оптимизации архитектуры, структур данных, алгоритмов, использования памяти и управления потоком.
И, конечно, любая оптимизация преждевременна, если вы не определили порог достижения цели.
В большинстве случаев либо:
A) Вы можете достичь целевого порога производительности, выполняя высокоуровневые оптимизации, поэтому нет необходимости возиться с выражениями.
или
B) Даже после выполнения всех возможных оптимизаций вы не достигнете своего порогового значения производительности, а низкоуровневые оптимизации не будут иметь достаточных различий в производительности, чтобы оправдать потерю читаемости.
По моему опыту, большинство проблем оптимизации могут быть решены на уровне архитектуры / дизайна или структуры данных / алгоритма. Часто требуется (хотя и не всегда) оптимизация для использования памяти. Но редко требуется оптимизировать логику управления потоком и выражения. И в тех случаях, когда это действительно необходимо, этого редко бывает достаточно.