我在一个网站上解决了一个练习题,上面写着
此问题的目的是验证您用于读取输入数据的方法是否足够快以处理带有大量输入/输出警告的问题。您应该能够在运行时每秒处理至少 2.5MB 的输入数据。
另外,我如何优化 printf 和 scanf 以外的输入/输出例程?
我在一个网站上解决了一个练习题,上面写着
此问题的目的是验证您用于读取输入数据的方法是否足够快以处理带有大量输入/输出警告的问题。您应该能够在运行时每秒处理至少 2.5MB 的输入数据。
另外,我如何优化 printf 和 scanf 以外的输入/输出例程?
它是特定于操作系统的(因为 C 标准只知道<stdio.h>
)。对于 Linux,考虑使用低级系统调用来提高效率,例如open(2)、mmap(2)、read(2)、pread(2)、write(2)。您可能还想使用readahead(2)。不要忘记在相当大的块(例如 128Kbytes)中进行 I/O,如果可能,页面对齐。阅读《高级 Linux 编程》一书。
如果仅限于标准 C99 函数,请在相当大的块上使用fread(3) 。还可以考虑使用setvbuf(3)增加内部缓冲区
而 2.5Mbyte/sec 也不是很令人印象深刻。可能瓶颈是硬件,但您应该能够在标准桌面硬件上获得 20 或 50Mbytes/sec。使用 SSD 会有很大帮助。