0

私は次のように述べているサイトで練習問題を解いていました

この問題の目的は、入力データの読み取りに使用している方法が、大量の入出力警告でブランド化された問題を処理するのに十分な速さであるかどうかを検証することです。実行時に 1 秒あたり少なくとも 2.5MB の入力データを処理できることが期待されます。

また、printf と scanf 以外の入出力ルーチンを最適化するにはどうすればよいですか?

4

1 に答える 1

2

これはオペレーティング システム固有です (C 標準は についてしか認識していないため<stdio.h>)。Linux では、効率のためにopen(2)mmap(2)read(2)pread(2)write(2)などの低レベルのシステムコールを使用することを検討してください。readahead(2)を使用することもできます。I/O をかなり大きなブロック (たとえば 128K バイト) で作成し、可能であればページを揃えることを忘れないでください。高度な Linux プログラミングの本を読んでください。

標準の C99 関数に制限されている場合は、かなり大きなチャンクでfread(3)を使用してください。setvbuf(3)を使用して内部バッファーを増やすことも検討してください。

また、2.5Mbyte/秒はあまり印象的ではありません。おそらくボトルネックはハードウェアですが、標準のデスクトップ ハードウェアでおそらく 20 または 50M バイト/秒を取得できるはずです。SSDを使用すると、非常に役立ちます。

于 2012-10-26T20:07:36.837 に答える