如何处理c中的大输入

时间:2012-10-26 20:02:19

标签: c

我正在解决一个说明

的网站上的练习题
  

此问题的目的是验证您的方法是否正确   用于读取输入数据足以快速处理问题   标有巨大的输入/输出警告。你应该是   能够在运行时每秒处理至少2.5MB的输入数据。

另外,我如何优化printf和scanf以外的输入/输出程序?

1 个答案:

答案 0 :(得分:2)

它是特定于操作系统的(因为C标准只知道<stdio.h>)。对于Linux,请考虑使用低级别系统调用来提高效率,例如open(2)mmap(2)read(2)pread(2)write(2)。您可能还想使用readahead(2)。不要忘记在相当大的块(例如128K字节)中进行I / O,如果可能的话,页面对齐。阅读Advanced Linux Programming书。

如果仅限于标准C99功能,请在相当大的块上使用fread(3)。考虑使用setvbuf(3)

增加内部缓冲区

2.5Mbyte / sec不是很令人印象深刻。可能是瓶颈是硬件,但你应该能够在标准桌面硬件上获得20或50Mbytes / sec。使用SSD会有很大帮助。