Выбор ответа Junior Производительность и кеш спрашивают часто обновлено
std::endl в цикле
Вопрос
Почему вывод миллиона строк через std::cout << x << std::endl; медленный?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: std::endl сбрасывает буфер на каждой строке: миллион вызовов write. std::endl это '\n' плюс flush.
Варианты ответа
std::endlвыводит два символа\r\n, и объём вывода удваиваетсяstd::endlсинхронизирует потоки выполнения через глобальный мьютекс- Медленный не
endl, а преобразование числа в строку на каждой итерации std::endlсбрасывает буфер на каждой строке: миллион вызововwriteправильный ответ
Разбор
std::endl это '\n' плюс flush. Сброс буфера превращается в системный вызов write, и вывод перестаёт буферизоваться. Пишите '\n', а сбрасывайте явно, когда нужно. Для ввода дополнительно помогает std::ios::sync_with_stdio(false).
- Перевод строки один символ.
- К потокам выполнения endl отношения не имеет.
- Форматирование чисел дешевле системного вызова.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.