为什么在 C 中从 stdin 读取行比在 Python 中慢
尽管有预期,从标准输入读取输入行的 C 代码可以执行速度明显慢于 Python 对应项。这种差异源于 C 中的默认设置。
默认输入流配置
默认情况下,C 输入流 (cin) 与标准输入/输出 (stdio) 同步)。这种同步意味着 cin 尝试避免任何输入缓冲,从而导致它一次读取一个字符。
为什么缓冲很重要
通常,输入流以较大的大小缓冲输入块,减少数据检索所需的系统调用数量。但是,基于 FILE* 的 stdio 和 iostream 的单独实现和缓冲区在一起使用时可能会导致问题。
为了防止潜在的冲突,默认情况下流与 stdio 同步。 Cin 逐个读取字符,带来很大的开销,尤其是在处理数百万行时。
解决方案
要提高性能,请使用sync_with_stdio(false) 禁用流同步main 函数开头的方法:
std::ios_base::sync_with_stdio(false);
通过此更改,C 流可以独立缓冲,从而加快输入速度
替代方法:fgets
提高输入速度的另一种方法是使用 fgets 函数代替 getline:
char buffer[1024]; while (fgets(buffer, sizeof(buffer), stdin)) { // Process the line }
以上是为什么 C 标准输入读取速度比 Python 慢,如何改进?的详细内容。更多信息请关注PHP中文网其他相关文章!