首页 >后端开发 >Python教程 >为什么从标准输入读取行时,C 的 cin 明显慢于 Python 的 input() ,以及如何提高性能?

为什么从标准输入读取行时,C 的 cin 明显慢于 Python 的 input() ,以及如何提高性能?

Patricia Arquette
Patricia Arquette原创
2024-11-23 06:34:10669浏览

Why is C  's `cin` Significantly Slower Than Python's `input()` for Reading Lines from Standard Input, and How Can Performance Be Improved?

为什么在 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中文网其他相关文章!

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