私は非常に大きなディスクドライブ(2TB)を持っていますが、メモリ(8GB)はあまりありません。ディスクファイルシステムの大容量ファイル(〜200 GB)に対してビッグデータ実験を実行できるようにしたいです。ディスク帯域幅の面では非常に費用がかかることがわかりますが、高いI / O使用量は気にしません。
選択した場所でファイルに対して読み取りおよび書き込み操作を実行できるように、この大きなファイルをC ++配列にロードするにはどうすればよいですか? mmapはこの目的に使用できますか?これを行うには、どのパラメータオプションを使用する必要がありますか?プログラムを実行するたびにOOMキラーを実行したくありません。
私はmmapがファイルサポートと匿名マッピングをサポートしていることを知っていますが、どのようなものを使用するのか完全にはわかりません。プライベートマッピングと共有マッピングを使用するにはどうですか?
ベストアンサー1
匿名マッピングではなくファイルベースのマッピングを使用してファイルを mmap するのは妥当です。マップされたメモリに書き込んで変更をファイルに書き換えるには、共有マップを使用する必要があります。ファイルサポート共有マッピングを使用すると、OOMキラーについて心配する必要はありません。したがって、プロセスが64ビットの場合、ファイル全体をメモリにマッピングするだけで十分です。 (64ビットでなくても、問題はRAM不足ではなくアドレス空間不足であるため、OOMキラーはまだ影響を与えません。mmapは失敗するだけです。)