C ++ iostreams可以控制C ++流是否必须通过std::ios_base::sync_with_stdio()
与C流同步。关闭流同步允许标准库实现为C ++流和C流使用独立的非同步缓冲区,以潜在地提高性能。
为什么对于实施者来说,为C和C ++流使用单独的独立io缓冲区门是否重要?与一组io缓冲区相比,我没有看到这可能如何提高性能。在程序级别允许标准库一组io缓冲区可以减少对底层OS io工具的通常昂贵的调用次数,但是两组io缓冲区的优势是什么呢?
是否存在技术原因,C和C ++流的单独缓冲区可以使性能受益,或者设计只是一个历史工件?
它是否与委员会有什么关系,希望C ++实现者能够通过构建现有的C标准库实现来实现C ++标准库?
我正在寻找的不仅仅是“标准如此说明”。
如果需要操作系统特性来解释其基本原理,欢迎使用答案作为实际操作系统提供的io工具的示例,或者解释假设但合理的操作系统。
编辑:为了澄清,问题不在于同步流可能会损害性能。问题是为什么C ++标准的设计假设可能有两组io缓冲区,为什么保持开放这种可能性对实现者有用。 std::ios_base::sync_with_stdio()
恰好是这种假设的结果。
答案 0 :(得分:4)
与为了规定尚未构建的事物的行为而编写的某些标准不同,C ++标准与C标准一样,用于描述已经存在的事物的行为。标准的作者希望避免任何使得难以为平台设计符合标准的C ++实现的任何内容,该平台的工作方式与该平台的早期预标准实现一样。
如果某些实现的C ++流支持标准未强制要求的一些其他特定于平台的函数,那么一致的C ++实现可能无法同时支持这些函数,同时也使用与C中相同的缓冲结构。 <stdio.h>
包。标准的作者可能无法避免要求实现无法支持这种增强的语义,或者允许它们独立于<stdio.h>
的那些缓冲其流。鉴于任何事情都不会阻止特定实现保证两个库的流将使用相同的缓冲区,无论标准是否需要它,如果有任何可能的更强的要求任何有用的实现功能,后一选择将是有意义的。 / p>