繁体   English   中英

在iostream中缓冲

[英]buffering in iostream

有人可以解释一下,这到底是什么意思? 我试图了解clogcerr什么区别,区别仅在于缓冲,谢谢

当您编写堵塞时,您实际上是在内存中存储字符。 当此存储已满时,它将写入实际流。 当关闭流时(这将在程序结束时发生),然后将所有剩余数据写入流中(也可以进行手动刷新)。

对于cerr,这不会发生。

通常,由于写入内存的速度比写入大多数流的速度快,因此缓冲的效果是性能的整体提高。 并非总是这样(一个经典的例子是,间接级别导致将缓冲区写入到写入缓冲区的缓冲区),但通常足以使它成为合理的默认值。 但是,结果是在写入流对象和写入实际流之间可能会有延迟,这在某些情况下是不合适的。

可以合理地想象,写给cerr的某些东西可能需要立即采取行动,但是写给堵塞的东西则不需要,因此有所不同。

clog和cerr之间的区别在于,clog已完全缓冲,而到cerr的输出在每次格式化后都会写入外部设备。 对于完全缓冲的流,仅当缓冲区已满时才将输出写入实际的外部设备。 因此,clog对于将输出重定向到文件更为有效,而cerr主要用于终端I / O。 每次格式化后写入外部设备,如果是cerr,则写入终端,其目的是使输出与终端的输入同步。 而且,预定义的流与其关联的C标准文件同步。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM