私は初心者の質問があります。私はfopen、ReadFile(WINAPI)のような関数を使って4Mbを超えるファイルを読むことはありません。私の質問は512Mビットの400Mbロードブロックのような大きなファイルをメモリに読み込む最良の方法は何ですか?大きなファイルのためにsha-1またはCRC32チェックサムを計算> 400mb
おかげで、すべての
私は初心者の質問があります。私はfopen、ReadFile(WINAPI)のような関数を使って4Mbを超えるファイルを読むことはありません。私の質問は512Mビットの400Mbロードブロックのような大きなファイルをメモリに読み込む最良の方法は何ですか?大きなファイルのためにsha-1またはCRC32チェックサムを計算> 400mb
おかげで、すべての
まず - 最初のインスタンスで - あなたはその小さなを読みたくないかもしれない - それはディスクから来るとき、いくつかのキロバイトが良いです。あなたの場合、単純な実装では16kを読み取ることができます。次に、512バイトの操作で32回繰り返すことができます。
実際にはそれほど重要ではない - OSは賢明で、一般的に2番目に推測する - とにかくもっと読む。だからあなたが単純に行う素朴な実装は、
種類のものは問題ありません。
あなたはいつもそのような(かなり大きい)ファイルを持っていることが分かっているならば、パフォーマンスは重要であり、それらのファイルの他の用途もあります。次にファイルを 'メモリマッピング'することを考えてください。ファイル全体が仮想メモリに表示されます。それについてはhttp://msdn.microsoft.com/en-us/library/windows/desktop/aa366556(v=vs.85).aspxをご覧ください。
大きなファイルを読み取る場合は、ファイルのバッファリングを無効にすることがよくあります。そうしないと、一度読んだり書いたりしてもシステムのファイルキャッシュにこれらの大容量のファイルを埋め込むことができます。結果として、より頻繁にアクセスされるファイルはキャッシュされなくなり、システムは一定の時間遅くなります。
記事File Bufferingには、バッファリングせずにファイルにアクセスする方法が記載されています。残念なことに、直接ファイルへのアクセスは、Windowsの場合ほど簡単ではありません。
しかし、400 MByteは通常問題ではありません。ファイルが1 GByteよりかなり大きい場合を除き、私は直接ファイルアクセスを使用しません。