首页 >后端开发 >C++ >C IOStream 性能实际上比 printf/scanf 慢吗?

C IOStream 性能实际上比 printf/scanf 慢吗?

Barbara Streisand
Barbara Streisand原创
2024-11-07 00:57:02926浏览

Is C   IOStream Performance Actually Slower Than printf/scanf?

如何优化 C 中的 IOStream 性能

C 用户通常更喜欢 printf/scanf 系列函数而不是 C IOStream,尽管后者的接口优点。性能问题通常被认为是这种偏好的主要原因。

缓冲

扩大底层 Streambuf 的缓冲区大小可以通过减少 HDD 命中和系统显着提高性能来电。这是通过以下方式完成的:

char Buffer[N];
std::ifstream file("file.txt");
file.rdbuf()->pubsetbuf(Buffer, N);

区域设置处理

区域设置可能会由于字符转换、过滤和动态调度而引入性能开销。将语言环境设置为默认的 C 语言环境会禁用这些操作,可以提高性能:

std::locale::global(std::locale("C"));

同步

与 C stdio 同步 (std::ios_base: :sync_with_stdio(false)) 没有提供任何可观察到的性能优势。

测量

使用不同编译器和平台进行基准测试显示不同的结果:

  • SUSE 10p3 上的 g 3.4.2:C 速度减慢约 20%
  • Ubuntu 11.10 上的 g 4.7.2:C 快 25%
  • Ubuntu Linux 10.10 上的 g 4.4.5:C 快 17%更快
  • macOS X 上的 g:C 慢 111%
  • Kubuntu 16.04 上的 clang 3.8.0:C 快 66%

这些结果表明 IOStream 性能有所提高取决于具体的实施实现。因此,不存在跨平台优化 IOStreams 的通用解决方案。

以上是C IOStream 性能实际上比 printf/scanf 慢吗?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn