Я пытаюсь понять, как работает буфер выходного потока.Я не нашел ничего, что объясняет весь процесс написания стандартного вывода в контексте std::cout
.Насколько я понимаю, std::cout
на самом деле не печатает на стандартном выводе, а записывает содержимое в буфер потока вывода эмулятора терминала.Когда буфер заполнен, эмулятор терминала удаляет содержимое буфера и записывает его на дисплей терминала (стандартный вывод).По моему мнению, это то, что происходит, когда эмулятор терминала выполняет операцию flush
.
В случае std::endl
в эмулятор терминала делается явный запрос на очистку содержимогобуфер сразу, что вызывает снижение производительности.Это падение вызвано тем, что наша программа потратила время на создание запроса flush
к эмулятору терминала и ожидала, пока содержимое буфера будет напечатано на дисплее терминала, прежде чем перейти к следующей строке кода.Без std::endl
, std::cout
не заботится о том, чтобы печатать содержимое сразу.Это оставляет ответственность за печать на эмуляторе терминала (путем записи содержимого в буфер потока вывода эмулятора терминала).У меня есть несколько сомнений:
(1) Мое понимание того, как эмуляторы терминала отображают текст, запрошенный std::cout
, точно?
(2) Запрос flush
сделан кОС или эмулятор терминала?
(3) Если мы увеличим размер буфера выходного потока эмулятора терминала, произойдет ли увеличение производительности программы, дополненное заметной задержкой печати содержимого наотображение?