如何使IOStream表现更好?

大多数学习过C的C ++用户即使在用C ++编写代码时也喜欢使用printf/ scanf系列功能。


尽管我承认我发现接口的方式更好(尤其是POSIX格式和本地化),但似乎最令人担忧的是性能。


看一下这个问题:


如何加快逐行读取文件的速度


似乎最好的答案是使用fscanf,并且C ++ ifstream始终慢2-3倍。


我认为,如果我们可以编译一个“技巧”存储库来改善IOStreams的性能,那将是很棒的,什么可行,什么不可行。


要考虑的要点


缓冲(rdbuf()->pubsetbuf(buffer, size))

同步(std::ios_base::sync_with_stdio)

语言环境处理(我们可以使用精简的语言环境还是将其完全删除?)

当然,欢迎使用其他方法。


注意:提到了Dietmar Kuhl的“新”实现,但是我无法找到有关它的许多细节。先前的参考文献似乎是无效的链接。


qq_花开花谢_0
浏览 363回答 3
3回答

三国纷争

有趣的是,C程序员在编写C ++时更喜欢printf,因为我看到除了使用cout和iostream编写输出以外,还有很多C语言代码。通过filebuf直接使用,使用通常可以获得更好的性能(Scott Meyers在Effective STL中提到了这一点),但是直接使用filebuf的文档相对较少,大多数开发人员更喜欢std::getline在大多数情况下更简单。关于区域设置,如果创建构面,则通常通过一次使用所有构面创建一个区域设置,将其存储并保存到所使用的每个流中,通常会获得更好的性能。我最近确实在这里看到了另一个主题,因此这几乎是重复的。
打开App,查看更多内容
随时随地看视频慕课网APP