Выбор ответа Junior Производительность и кеш обновлено
С чего начинать оптимизацию
Вопрос
Сервис стал медленно отвечать. С чего правильно начать оптимизацию C++-кода?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Воспроизвести нагрузку и снять профиль, чтобы найти узкое место. Интуиция о том, где тормозит код, часто ошибается.
Варианты ответа
- Переписать горячие места на ассемблере с SIMD-инструкциями
- Заменить все
std::mapнаstd::unordered_mapво всём проекте - Воспроизвести нагрузку и снять профиль, чтобы найти узкое местоправильный ответ
- Включить
-O3и-march=nativeи считать задачу решённой
Разбор
Интуиция о том, где тормозит код, часто ошибается. Профиль показывает, на что реально уходит время: это может быть аллокатор, блокировка, ввод-вывод или алгоритм. После изменения нужно снова измерить.
- Ассемблер крайняя мера и редко нужен.
- Слепая замена контейнеров может ничего не дать или ухудшить (порядок обхода, память).
- Флаги компиляции полезны, но не заменяют поиск причины.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.