首页 > 后端开发 > C++ > 为什么 C 标准输入读取速度比 Python 慢,如何改进?

为什么 C 标准输入读取速度比 Python 慢,如何改进?

Barbara Streisand
发布: 2024-12-26 16:29:09
原创
391 人浏览过

Why is C   Standard Input Reading Slower Than Python's, and How Can It Be Improved?

为什么 C 标准输入读取效率低于 Python

比较 Python 和 C 从标准读取字符串输入行的性能输入(stdin)时,出现了显着的差异:C 代码的运行速度显着变慢。这促使我们调查造成这种性能差距的根本原因。

问题源于 C 的默认设置。默认情况下,istream(例如 cin)与 stdio 同步,从而避免输入缓冲。为了优化性能,可以使用 std::ios_base::sync_with_stdio(false) 语句禁用此同步。此调整缓解了主要的性能限制。

标准输入流在 Python 和 C 之间的设计上运行方式不同。 Python 通常是有缓冲的,而 C 的默认情况下是无缓冲的。一般情况下,缓冲减少了系统调用,提高了效率。然而,C 中基于 FILE* 的 stdio 和 iostream 的单独实现和缓冲区在一起使用时会带来潜在问题。

为了避免缓冲区不一致和意外结果,C 默认情况下将流与 stdio 同步。虽然这可以防止潜在的问题,但它会带来开销,特别是在处理大量输入时。

为了实现最大性能,程序员可以使用sync_with_stdio方法禁用同步。此优化允许 C 标准流独立缓冲,在某些场景下显着提高速度。

性能基准

为了更全面的比较,这里有各种方法的性能基准:

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 54,644,808 (Not a fair comparison)

显然,禁用同步并使用 fget 会显着提高 C 语言的性能.

以上是为什么 C 标准输入读取速度比 Python 慢,如何改进?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板