7

大きなファイル (おそらく 60GB 以上) を読み書きするための C++ プログラムを作成しています。問題をグーグルで調べると、32ビットシステムのファイルioに2GBの制限があるようです(私はWindows 7 64ビットを使用していますが、プログラムはmingw32でコンパイルされています)。私のプログラムでは、一度に 10 個の整数をファイルに書き込んでいます。これらの数値はすべて、何らかのアルゴリズムに基づいてランダムに生成されます。ファイルサイズが 40GB を超える場合でもプログラムは実行できるようですが、プログラムによって読み取られたデータが本当にファイルに保存されているデータなのか、または迷惑番号なのかを確認する方法がありません。とにかく、プログラムは警告やエラーを報告しません。32ビットプログラムで60GBを超えるファイルを読み書きすることは本当に可能ですか?

4

1 に答える 1

1

Fat32 ファイル システムでは、ファイル サイズに制限があります (最大 4GB だと思います)。Windows 7 は、デフォルトでそのファイルシステムを使用すべきではありません。

また、32 ビット システムでは、 CreateFileMapping /MapViewOfFileを使用して一度にメモリにマップできるファイル サイズに制限があります。ただし、fstream は内部で CreateFileMapping/MapViewOfFile を使用しないため、ファイル サイズの制限はありません (ファイル システムの制限は別として)。また、CreateFileMapping を使用しても、より大きなファイルの一部をメモリにマップできるため、ファイルシステムによって課されるもの以外に制限はありません。

于 2012-04-08T22:17:21.623 に答える