首页 > 后端开发 > C++ > 为什么 C 的 stdin 输入明显慢于 Python,如何改进?

为什么 C 的 stdin 输入明显慢于 Python,如何改进?

Susan Sarandon
发布: 2024-12-18 11:57:16
原创
869 人浏览过

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

为什么在 C 中从 stdin 读取行比 Python 慢得多?

在 C 中从标准输入 (stdin) 读取行可能会慢得多C 与 Python 相比,由于 C 输入流中的默认设置不同。

默认缓冲

默认情况下,C 输入流 (cin) 与标准输入/输出 (stdio) 流同步。这种同步会强制 cin 避免任何输入缓冲,从而导致一次读取一个字符。

Python 缓冲

相比之下,stdin 流Python 中默认是缓冲的,这使得它可以一次读取更大的输入块。这减少了读取数据所需的系统调用数量,从而提高了性能。

修复 C 代码

要在 C 中实现类似的性能,您可以禁用通过在主函数的开头添加以下行来与 stdio 同步:

std::ios_base::sync_with_stdio(false);
登录后复制

这允许 cin 缓冲其输入并显着改进

fgets 与 getline

此外,您可以考虑使用 fgets 代替 getline(),这是一个读取一行文本的 C 函数来自文件或标准输入。 fgets 的优点是不需要动态分配内存,进一步提高了性能。

性能比较

下表是不同方法的每秒行数(LPS)比较使用 100M 行文件:

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

如您所见,禁用同步或显着使用 fgets提高了 C 的性能。

以上是为什么 C 的 stdin 输入明显慢于 Python,如何改进?的详细内容。更多信息请关注PHP中文网其他相关文章!

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