为什么在 C 中从 stdin 读取行比 Python 慢得多?
问题:
当比较从 stdin 读取字符串输入的 Python 和 C 代码时,Python 代码的执行速度明显更快。尽管确保正确的 C 实现,Python 等效项的性能仍优于它一个数量级。
默认设置和系统调用:
在 Python 中,默认情况下启用输入缓冲,从而实现高效的大块读取和更少的系统调用。相比之下,C 流与 stdio 同步,迫使 cin 跳过输入缓冲并单独读取字符。此选择旨在防止与 stdio 函数发生冲突,但无意中引入了显着的开销。
性能优化:
要提高 C 性能,请包含语句 cin.sync_with_stdio(false ) 在 main 的开头。这会禁用流同步并允许独立缓冲,从而大大提高输入读取速度。
替代选项:
cin 的另一个高性能替代方案是 fgets,它采用 stdio 函数用于直接输入读取。
比较结果:
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 |
以上是为什么从标准输入读取行时,C 的 cin 明显慢于 Python 的 input() ,以及如何提高性能?的详细内容。更多信息请关注PHP中文网其他相关文章!