在本文中,我们深入研究了在 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中文网其他相关文章!