Сначала нужно исправить корректность: бесконечное увеличение 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), но компилятор может сам убрать ветвление. Заменять условие вручную без измерения бессмысленно: значительную стоимость может занимать сам генератор.