0

fopen と fgetc をループして読んでいる巨大なファイルがあります。

fopen で「rb」フラグを使用してファイル全体を読み取るには、約 6 秒かかります。ファイルには約 25k 行あります。

私は考えていた; fgetc よりも速い方法は何ですか? 最初にすべてを char* 配列にロードする方がよいでしょうか? strcpyの方がいいですか?

  • fgetcの方法である場合、または少なくとも配列内のcharごとにcharを取得できる場合は、より良いことに注意してください。

  • fgetc よりも優れた方法は何ですか?

4

3 に答える 3

1

fgetc は、fopen の基礎となるバッファリングを使用するため、すでにかなり最適化されています。各文字に対して関数を呼び出すだけです (システム コールではありません)。setbuffer を使用して、(巨大なファイルを読み込んでいると言うように) バッファ サイズを増やしてみることができます。

#define SIZE 65536
// or use even greater size if appropriate ...
char buffer[SIZE];

fd = fopen(...);
setbuffer(fd, buffer, SIZE);

または、文字ごとに読み取る必要がありますか?

于 2014-09-24T11:20:17.237 に答える
0

私のコードの全体的な問題は、char を「返す」必要があるたびに fget_pos と fset_pos を使用していたことでした。速度を大幅に向上させる ungetc がありました。

于 2014-10-08T22:52:26.747 に答える