比fgets更快的I / O功能

时间:2016-11-11 18:47:01

标签: c performance io

我正在用C语言写一个翻译,目前正在研究词法分析器。我使用fgets逐行读入源文件内容。

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

解释器必须处理大文件,因此将整个文件读入缓冲区实际上并不是一种选择。所以,我现在问的是,是否有人有更好的想法来浏览这些文件。如果解决方案与平台无关,那当然会很好,但如果不是,我可以解决这个问题。

1 个答案:

答案 0 :(得分:0)

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

所以,在你的"快速"例如,您只会遇到与10个函数调用相关的开销。在较慢的示例中,您将遭受100,000次函数调用的开销。

fgets在处理线路时非常快,甚至很长的线路。与调用fgets函数的时间相比,在fgets中花费的时间非常少。因此,更少的fgets调用将产生您看到的大部分"开销"是在调用fgets,而不是fgets所做的。

相关问题