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

std::endl в цикле

Вопрос

Почему вывод миллиона строк через std::cout << x << std::endl; медленный?

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

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

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

Коротко

Правильный ответ: std::endl сбрасывает буфер на каждой строке: миллион вызовов write. std::endl это '\n' плюс flush.

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

  1. std::endl выводит два символа \r\n, и объём вывода удваивается
  2. std::endl синхронизирует потоки выполнения через глобальный мьютекс
  3. Медленный не endl, а преобразование числа в строку на каждой итерации
  4. std::endl сбрасывает буфер на каждой строке: миллион вызовов writeправильный ответ

Разбор

std::endl это '\n' плюс flush. Сброс буфера превращается в системный вызов write, и вывод перестаёт буферизоваться. Пишите '\n', а сбрасывайте явно, когда нужно. Для ввода дополнительно помогает std::ios::sync_with_stdio(false).

  • Перевод строки один символ.
  • К потокам выполнения endl отношения не имеет.
  • Форматирование чисел дешевле системного вызова.

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

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