scanf() 在 C 性能中能否超越 iostream?
scanf() 提供比 C 中 cin 更快的输入处理的概念已经引发程序员之间的争论。本文深入研究了这些方法之间的性能比较,检查了证据并提供了详细的解释。
性能测试
为了评估性能差异,一个简单的程序是创建从标准输入读取数字列表并对它们执行异或运算。 cin 和 scanf() 均在单独的实现中使用:
#include <iostream> int main() { int parity = 0; int x; while (std::cin >> x) parity ^= x; std::cout << parity << std::endl; return 0; }
#include <stdio.h> int main() { int parity = 0; int x; while (1 == scanf("%d", &x)) parity ^= x; printf("%d\n", parity); return 0; }
结果
使用包含超过 3300 万个随机数的文件,测量执行时间:
优化注意事项
更改编译器优化设置对结果的影响很小。
增强的 iostream性能
发现性能差距部分是由于 iostream 与 C I/O 函数保持同步造成的。通过使用命令 std::ios::sync_with_stdio(false) 禁用此同步,iostream 的性能显着提高:
#include <iostream> int main() { int parity = 0; int x; std::ios::sync_with_stdio(false); while (std::cin >> x) parity ^= x; std::cout << parity << std::endl; return 0; }
新结果
禁用 iostream 同步后:
结论
证据表明对于 C 中的原始输入处理, scanf() 确实比 cin 更快。但是,如果禁用 iostream 的同步,iostream 将成为最佳选择,其性能优于 scanf() 和优化的 cin 版本。
因此,虽然 scanf() 在特定场景下可能更快,但 iostream 提供了更好的同步控制以及更广泛的功能。当速度至关重要时,建议禁用 iostream 同步。
以上是scanf() 在 C 输入速度方面总是优于 iostream 吗?的详细内容。更多信息请关注PHP中文网其他相关文章!