我正在解决一个说明
的网站上的练习题此问题的目的是验证您的方法是否正确 用于读取输入数据足以快速处理问题 标有巨大的输入/输出警告。你应该是 能够在运行时每秒处理至少2.5MB的输入数据。
另外,我如何优化printf和scanf以外的输入/输出程序?
答案 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会有很大帮助。