Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/132.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ iostream中的缓冲_C++_Buffering - Fatal编程技术网

C++ iostream中的缓冲

C++ iostream中的缓冲,c++,buffering,C++,Buffering,谁能解释一下,这到底是什么意思?我试图理解clog和cerr之间的区别,区别仅仅在于缓冲 提前感谢当您向clog写入时,实际上是向内存中的字符存储写入。当此存储区满时,它将写入实际流。当流关闭时(这将发生在程序结束时),所有剩余数据都会写入流(也可能发生手动刷新) 对于cerr,这种情况不会发生 一般来说,由于写入内存的速度比写入大多数流的速度快,因此缓冲的效果是性能的总体提高。情况并非总是如此(一个典型的例子是,间接级别导致缓冲区写入缓冲区写入缓冲区),但这通常足以成为一个合理的默认值。但结果

谁能解释一下,这到底是什么意思?我试图理解
clog
cerr
之间的区别,区别仅仅在于缓冲
提前感谢

当您向clog写入时,实际上是向内存中的字符存储写入。当此存储区满时,它将写入实际流。当流关闭时(这将发生在程序结束时),所有剩余数据都会写入流(也可能发生手动刷新)

对于cerr,这种情况不会发生

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


可以合理地想象,向cerr写入的内容可能需要立即采取行动,但向clog写入的内容不会立即采取行动,因此不同之处在于。

当您向clog写入内容时,实际上是向内存中的字符存储写入内容。当此存储区满时,它将写入实际流。当流关闭时(这将发生在程序结束时),所有剩余数据都会写入流(也可能发生手动刷新)

对于cerr,这种情况不会发生

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


可以合理地想象,写入cerr的内容可能需要立即采取行动,但写入clog的内容不会立即采取行动,因此存在差异。

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

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

可以将缓冲区->缓冲区->缓冲区写入视为代码中的一个逻辑错误,因此并不真正相关,因为错误通常不会比正确的代码快。@Martin,如果这些缓冲区都彼此远离,那么它是次优的,但并非不正确。可以将缓冲区->缓冲区->缓冲区写入视为代码中的一个逻辑错误,因此并不真正相关,因为错误通常不会比正确的代码快。@Martin,如果这些缓冲区都是彼此分开的黑框,那么这是次优的,但不是不正确的。