буферизация в iostream - PullRequest
       4

буферизация в iostream

0 голосов
/ 30 сентября 2010

Может кто-нибудь объяснить, что именно это означает?Я пытаюсь понять, в чем разница между clog и cerr, разница только в буферизации, спасибо заранее

Ответы [ 2 ]

2 голосов
/ 30 сентября 2010

Когда вы пишете в засорение, вы фактически пишете в хранилище символов в памяти.Когда это хранилище заполняется, оно записывает в текущий поток.Когда поток закрывается (что может произойти в конце программы), тогда все остальные данные записываются в поток (также может происходить ручная очистка).

С cerr этого не происходит.1004 * Как правило, поскольку запись в память выполняется быстрее, чем запись в большинство потоков, эффект буферизации - это общее улучшение производительности.Это не всегда так (классический пример, когда уровни косвенности приводят к записи в буфер в буфер, записывающий буфер), но этого достаточно, чтобы это было разумным значением по умолчанию.Следствием этого является то, что между записываемым объектом потока и фактическим записываемым потоком может быть задержка, которая в некоторых случаях неуместна.быстрых действий, но что-то записывать в засор не будет, отсюда и разница.

1 голос
/ 30 сентября 2010

Разница между clog и cerr заключается в том, что clog полностью буферизован, а вывод в cerr записывается на внешнее устройство после каждого форматирования.При полностью буферизованном потоке вывод на фактическое внешнее устройство записывается только тогда, когда буфер заполнен.Таким образом, clog более эффективен для перенаправления вывода в файл, тогда как cerr в основном полезен для терминального ввода-вывода.Запись на внешнее устройство после каждого форматирования на терминал в случае cerr служит для синхронизации вывода с терминала и ввода с него.Кроме того, предварительно определенные потоки синхронизируются с соответствующими стандартными файлами C.

...