Иногда вам будут встречаться затратные по времени циклы или рекурсивные функции, которые окажутся узкими местами в вашей программе. Перед тем, как вы попытаетесь ускорить цикл, потратьте некоторое время на то, чтобы понять, можно ли избавиться от него полностью. Сработает ли здесь какой-нибудь другой алгоритм? Можно ли вычислить это параллельно с другим вычислением? Если вам не удалось найти обходной путь, тогда оптимизируйте цикл. Это просто: вынесите из него все, что можно. В конце концов, эта операция требует не только смекалки, но и понимания, сколько затрачивается на каждое выражение и операцию. Вот несколько предложений:
- Уберите операции с плавающей точкой
- Не выделяйте впустую новые блоки памяти
- Держите константы в одном месте
- Вынесите операции чтения и записи в буфер
- Старайтесь не использовать деление
- Старайтесь не использовать затратные приведения типов данных
- Перемещайте указатель вместо того, чтобы пересчитывать индексы
Стоимость каждой из этих операций зависит от вашей конкретной системы. Где-то компиляторы и аппаратное обеспечение выполнят их вместо вас. Разумеется, чистый и эффективный код лучше, чем тот, который требует понимания специфичной платформы.
Следующее: Как справиться с расходами на операции чтения и записи