与 Python 相比,在 C 中从 stdin 读取行的性能损失
人们可能会惊讶地发现,从 stdin 读取文本行C 比 Python 中的等效操作慢得多。为了解决这种性能差异,让我们深入研究它发生的原因并提供缓解它的解决方案。
C 中的默认设置
默认情况下,C 的 cin 流是与标准输入和输出 (stdio) 同步,导致禁用输入缓冲。这意味着 cin 一次读取一个字符,导致大量的系统调用,这是一个性能瓶颈。
Python 的优化输入处理
相比之下,Python采用优化的输入处理机制,以块的形式缓冲输入,减少系统调用并提高性能。
改进 C 读取性能
为了增强 C 的读取性能,可以采用两种方法:
禁用 cin 的同步stdio:
std::cin.sync_with_stdio(false);
使用 fgets 代替:
char buffer[1024]; while (fgets(buffer, sizeof(buffer), stdin)) { // process line }
比较方法
下表比较了各种实现的性能:
Implementation | Lines per Second |
---|---|
Python (default) | 3,571,428 |
cin (default/naive) | 819,672 |
cin (no sync) | 12,500,000 |
fgets | 14,285,714 |
wc (not fair comparison) | 54,644,808 |
显然,禁用 cin 同步或使用 fgets 显着提高了 C 的性能,使其与 Python 相当就从标准输入读取行而言。
以上是为什么在 C 中从 stdin 读取行比在 Python 中慢,如何改进?的详细内容。更多信息请关注PHP中文网其他相关文章!