Skip to content

Latest commit

 

History

History
15 lines (12 loc) · 2.37 KB

07-How-to-Optimize-Loops.md

File metadata and controls

15 lines (12 loc) · 2.37 KB

Как оптимизировать циклы

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

  • Уберите операции с плавающей точкой
  • Не выделяйте впустую новые блоки памяти
  • Держите константы в одном месте
  • Вынесите операции чтения и записи в буфер
  • Старайтесь не использовать деление
  • Старайтесь не использовать затратные приведения типов данных
  • Перемещайте указатель вместо того, чтобы пересчитывать индексы

Стоимость каждой из этих операций зависит от вашей конкретной системы. Где-то компиляторы и аппаратное обеспечение выполнят их вместо вас. Разумеется, чистый и эффективный код лучше, чем тот, который требует понимания специфичной платформы.

Следующее: Как справиться с расходами на операции чтения и записи