Выбор ответа Junior Производительность и кеш обновлено

С чего начинать оптимизацию

Вопрос

Сервис стал медленно отвечать. С чего правильно начать оптимизацию C++-кода?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Воспроизвести нагрузку и снять профиль, чтобы найти узкое место. Интуиция о том, где тормозит код, часто ошибается.

Варианты ответа

  1. Переписать горячие места на ассемблере с SIMD-инструкциями
  2. Заменить все std::map на std::unordered_map во всём проекте
  3. Воспроизвести нагрузку и снять профиль, чтобы найти узкое местоправильный ответ
  4. Включить -O3 и -march=native и считать задачу решённой

Разбор

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

  • Ассемблер крайняя мера и редко нужен.
  • Слепая замена контейнеров может ничего не дать или ухудшить (порядок обхода, память).
  • Флаги компиляции полезны, но не заменяют поиск причины.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.