C++ iostreams提供了对C++流是否必须通过std::ios_base::sync_with_stdio()与C流同步的控制。关闭流同步允许标准库实现对C++流和C流使用独立的非同步缓冲区,以提高性能。
为什么认为为C流和C++流使用独立的io缓冲区为实现者打开一扇门很重要?与一组io缓冲区相比,我看不出这是如何提高性能的。允许标准库在程序级别上使用一组io缓冲区可以减少对底层OS设施的通常代价高昂的调用,但是两组io缓冲区的优点是什么呢?
对于C流和C++流的单独缓冲区是否有技术上的原因可以提高性能,还是设计只是一个历史构件?
这是否与委员会希望C++实现者能够在现有C标准库实现的基础上实现C++标准库有关?
我要的不仅仅是“标准这么说”。
如果需要OS特性来解释理由,欢迎回答以实际OS提供的io设施为例,或者解释假设的、但合理的OS。
编辑:要澄清的是,问题不是为什么同步流会损害性能。问题是,为什么设计C++标准时假定可能有两组io缓冲区,为什么保留这种可能性对实现者很有用。std::ios_base::sync_with_stdio()恰好是这个假设的结果。
发布于 2016-12-27 20:08:28
与一些标准不同的是,C++标准和C标准一样,是用来描述已经存在的事物的行为。该标准的作者希望避免任何可能使设计一个符合标准的C++实现变得困难的事情,因为该平台和该平台的早期标准前实现一样能够工作。
如果有一些实现的C++流支持一些标准没有强制要求的特定于平台的额外功能,那么一个符合标准的C++实现可能不可能同时支持这些函数,同时也使用C的<stdio.h>包中相同的缓冲结构。对于标准的作者来说,可能不可能避免要求实现不能支持这种增强的语义,或者允许它们独立于<stdio.h>的流进行缓冲。考虑到无论标准是否需要,任何特定的实现都不能保证两个库的流使用相同的缓冲区,如果存在更强的需求会有任何有用的实现特性的可能性,后一种选择是有意义的。
https://stackoverflow.com/questions/41351213
复制相似问题