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,如果这些缓冲区都是彼此分开的黑框,那么这是次优的,但不是不正确的。