ファイルAの行をループするときに、行を解析し、各文字列(char*
)を。に入れchar**
ます。
行の終わりで、ファイルBを開き、を使用して、そのファイルから文字を取得する手順を実行しfgets
ます。次に、ファイルBを閉じます。fseek
fgetc
行ごとにファイルBの再オープンと再クローズを繰り返します。
私が知りたいのは:
を使用することでパフォーマンスが大幅に低下するため、動的ではなく静的なものを使用する必要があります
malloc
か?free
myArray[NUM_STRINGS][MAX_STRING_WIDTH]
char** myArray
ファイルBを開いたり閉じたりすることによるパフォーマンスのオーバーヘッドはかなりありますか(概念的には、何千回も)?ファイルAがソートされている場合、
fseek
ファイルBで「後方」に移動し、ファイルBで以前に配置されていた場所をリセットする方法はありますか?
編集2つのアプローチにより、実行時間が大幅に短縮されたことがわかりました。
私のファイルBは実際には24個のファイルの1つです。同じファイルB1を1000回開き、次にB2を1000回開くのではなく、ファイルB1を1回開き、閉じ、B2を1回、閉じるなどします。これにより、数千回の
fopen
操作fclose
が約24回に減ります。以前
rewind()
はファイルポインタをリセットしていました。
これにより、速度が約60倍向上しましたが、これで十分です。を指摘していただきありがとうございますrewind()
。