Выявление узких мест в работе программы

Сначала нужно исправить корректность: бесконечное увеличение signed int приводит к переполнению и неопределённому поведению. После этого уже можно измерять стоимость генерации и ветвления.

Короткий ответ

Что ответить на собеседовании

Сначала нужно исправить корректность: бесконечное увеличение signed int приводит к переполнению и неопределённому поведению. После этого уже можно измерять стоимость генерации и ветвления.

Подробный разбор

Ответ с пояснениями

Условие

Необходимо проанализировать представленный фрагмент кода и указать, какие потенциальные проблемы с производительностью в нём присутствуют.

# include <iostream>
# include <cmath>

int main() {
    int sum{};
    for (;;) {
        int num = rand() % 42;
        if (num % 2 == 0) {
            sum += 2;
        } else {
            sum += 1;
        }
    }
}

Ответ

Сначала нужно исправить корректность: бесконечное увеличение signed int приводит к переполнению и неопределённому поведению. После этого уже можно измерять стоимость генерации и ветвления.

В примере отсутствуют ограничение числа итераций и наблюдаемое использование результата; это плохая основа для бенчмарка. Для rand следует явно подключить . Остаток % 42 может давать смещённое распределение.

Для конечного безопасного диапазона эквивалентно sum += 2 - (num % 2), но компилятор может сам убрать ветвление. Заменять условие вручную без измерения бессмысленно: значительную стоимость может занимать сам генератор.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее