gpt4 book ai didi

c - 比 fgets 更快的 I/O 函数

转载 作者:太空宇宙 更新时间:2023-11-04 04:26:55 25 4
gpt4 key购买 nike

我正在用 C 编写解释器,目前正在研究词法分析器。我使用 fgets 逐行读取源文件内容。

然而,在我的电脑上,读取一个 100,000 行,每行 50 个字符的文件大约需要 8 秒,而读取一个 10 行,每行 50,0000 个字符的文件需要 0.2 秒(增加行的长度并没有真正改变任何东西)。我认为这是由于 fgets 很慢。我确实编写了自己的逐行阅读器,但我得到了相同的结果。

解释器必须处理大文件,因此将整个文件读入缓冲区并不是一个真正的选择。所以,我现在想问是否有人对浏览这些文件有更好的想法。如果解决方案独立于平台当然会很好,但如果不是,我可能可以解决这个问题。

最佳答案

这是因为 fgets 是面向行的。这意味着在您的 0.2 秒示例中 fgets 仅被调用了 10 次,而在另一个示例中 fgets 被调用了 100,000 次。

因此,在您的“快速”示例中,您只会承受与 10 次函数调用相关的开销。在较慢的示例中,您承受了 100,000 次函数调用的开销。

fgets 处理一行的速度非常快,即使是很长的行。与调用 fgets 函数的时间相比,在 fgets 内部花费的时间非常少。因此,更少的 fgets 调用会产生您看到的结果,因为大部分“开销”都在调用 fgets 中,而不是在 fgets 的作用中。

关于c - 比 fgets 更快的 I/O 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40554300/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com