首页 >后端开发 >C++ >为什么 C `stdin` 的读取速度比 Python 慢很多?

为什么 C `stdin` 的读取速度比 Python 慢很多?

Linda Hamilton
Linda Hamilton原创
2025-01-04 17:11:41276浏览

Why is C   `stdin` Reading So Much Slower Than Python's?

了解 C 中 Stdin 读取与 Python 相比的缓慢性能

在本文中,我们深入研究了在 C 中从标准输入 (stdin) 读取行的原因执行速度明显慢于其对应的 Python。

比较以下 C 和 Python 时代码:

C :

getline(cin, input_line);

Python:

for line in sys.stdin:

令人惊讶的结果出现,Python 优于 C一个数量级。这种差异可以归因于 C 中不同的默认设置。

默认情况下,C 中的 cin 流与标准 I/O 系统(stdio)同步,这导致它避免输入缓冲。这意味着 cin 将逐个字符读取输入,而不是使用较大的块,从而导致大量昂贵的系统调用。

要解决此限制,您可以通过将以下语句添加到 main 的开头来禁用此同步函数:

std::ios_base::sync_with_stdio(false);

通过此修改,cin 将被允许独立缓冲其输入,从而显着提高性能。

此外,您可以使用 fgets 函数,它提供了一种更高效、更直接的方式来读取输入行,而不会产生同步开销。

总结:

C 中的默认同步设置导致更多的系统调用用于缓冲区管理,使其比 Python 读取 stdin 输入慢。为了提高性能,建议禁用此同步或使用 fgets 函数。

以上是为什么 C `stdin` 的读取速度比 Python 慢很多?的详细内容。更多信息请关注PHP中文网其他相关文章!

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