将来の使用のために、たくさんのデータをバッファリングする必要があります(GB単位)。 このような膨大な量のデータをバッファリングするのに十分なRAMがないため、データをファイルに格納することにしました。ファイルへのデータ書き込み:fflush()に多くの時間がかかります
ここでの落とし穴は、データをファイルに書き出している間に、他のスレッドがその "バッファされた"データを必要とすることがあるため、何か書き込むたびにファイルストリームをフラッシュしなければならないということです。正確には、データは(TiVoのような)あらかじめ記録されたデータとしてバッファリングするビデオフレームです( )。他のスレッドは、特定の時点で書き込むこともあれば書きたくないかもしれませんが、そうしたときにファイルからfread
フレームを処理する。
一般的なケースでは、fwrite
- fflush
のコンボは約150μsですが、ときどき(かなり公然)、コンボは1.5秒以上かかります。私はリアルタイムでフレームを処理しなければならないので、これを買う余裕はありません。
私はここで多くの質問があります。
は、ファイル内のバッファリングデータの私のアプローチは正しいですか?どのような選択肢がありますか?
なぜfwrite-fflush操作が突然何らかの機会に時間がかかる理由はありますか? 1.5秒を1回服用した後、150μsに戻ります。
メモリマップファイルの使用に関するコメントに関して、数GBのファイルをメモリにマップできますか?私は512 MBのRAMを持っています。また、どのようにしてメモリマッピングが簡単になりますか? – puffadder
はい、あなたのCPUアドレス空間がそれを処理できる限り、ファイルサイズは重要ではありません。 32ビットCPUの場合、約3.5GBのファイルを64ビットCPUで管理できますが、ファイルサイズは関係ありません。シンプルなもの:http://en.wikipedia.org/wiki/Memory-mapped_file基本的には、メモリ内のバイト配列のようにファイルにアクセスすることができます。 –