缓冲区刷新:"\n"与std :: endl

11 c++ optimization

可能重复:
C++:"std :: endl"vs"\n"

Accelerated C++中,提到了两件事:

  1. 大多数系统花费大量时间将字符写入输出设备.因此,C++会累积要写入缓冲区的字符,并等待刷新缓冲区.

  2. 刷新缓冲区的一种方法是,如果我们通过使用明确告诉它这样做std::endl.

这使我想知道:很明显的好处是非常的一切小,不易察觉,除了最大的产出,但使用"\n"比使用速度更快std::endl,或者根本"\n"也刷新缓冲区?

Sha*_*anu 9

使用'\n'不会刷新缓冲区,并且确实比使用std :: endl更快.

在典型的I/O中,输出在写入目标器件之前进行缓冲.这样,当写入慢速访问设备(如文件)时,它不必在每个字符后访问设备.刷新"冲洗"缓冲区到设备上,导致明确的性能开销.

-adapted from:C++ - endl和刷新缓冲区

  • @SigTerm:iostreams有一个糟糕的设计,但在几次"g ++"实现中,我发现它比C stdio略快. (3认同)
  • @pst:好吧,当输出大量数据到文件时,它实际上可能会破坏性能(当我用CSV写入数十MB的数据时,它发生在我身上). (2认同)