为什么从 stdin 读取行在 C 中比 Python 慢得多
在比较 Python 和 C 中的输入读取速度时,观察到C 代码的执行速度慢了一个数量级。
cin 缺乏缓冲
这种差异是由默认行为的根本差异引起的。 C 中的 cin 默认情况下与标准输入/输出 (stdio) 同步,导致它放弃输入缓冲,导致一次读取一个字符,这对于系统调用而言是一个昂贵的过程。
解决方案:禁用同步
为了提高性能,可以通过在开头添加以下行来禁用 cin 与 stdio 的同步程序:
std::ios_base::sync_with_stdio(false);
这允许 C 流独立缓冲 I/O,显着提高读取速度。
Straw poll 来说明差异:
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 (unfair comparison) | 54,644,808 |
此表展示了 cin 同步禁用时读取速度的巨大差异。
以上是为什么 C 的 cin 比 Python 的输入慢很多,如何改进?的详细内容。更多信息请关注PHP中文网其他相关文章!