13

マップされたバイナリファイルをメモリに作成したい。ただし、システムにマップするファイルを作成する方法がわかりません。ドキュメントを数回読んで、2つのマップトファイルの実装があることに気付きました。1つはiostreamにあり、もう1つはプロセス間にあります。

マップされたファイルを共有メモリに作成する方法について何か考えがありますか?マルチスレッドプログラムがバイナリファイル形式で記述された大きなdoubleの配列を読み取れるようにしようとしています。また、iostreamとinterprocessのマップされたファイルの違いは何ですか?

4

2 に答える 2

2

私が知る限り、iostreams はマップされたファイルを共有メモリに配置します (これはあなたが望むものです)。ただし、インタープロセスはファイルを別のプロセスのアドレス空間に配置します。

何らかの方法で互いに通信する複数のプロセス (スレッドではない) がない限り、おそらく iostream を使用する必要があります。

于 2010-03-28T09:03:52.057 に答える
0

私が2つの間に見る主な違いは、それらがどのように使用されるかです。boost-interprocessでは、メモリマップトファイルを使用するために、配置を使用してそのメモリスペースにオブジェクトを作成しますnew。これらのオブジェクトは、ファイル内でバイナリ形式で自動的に永続化されます。その後、他のプロセスが同じファイルをマップしてそれらのオブジェクトを使用するか、プログラム自体がそれを永続キャッシュとして使用して後で再ロードすることができます。boost-iostreamsのメモリマップトファイルは、ファイルストリームと同じように機能しますが、であるという追加の利点がありboost::iostream、プロセス間通信にストリームセマンティクスを提供します。

boost::iostream単一のプロセスの場合、メモリマップトファイルを使用するメリットはあまりありません。ただし、ファイルはすでにメモリにロードされているため、ファイルの操作の待ち時間を短縮できます。ただし、この利点は、ファイルの一部を絶えず書き換えている場合にのみ得られます。ファイルの単一の読み取り/書き込みパスの場合、速度が向上しない可能性があります。

于 2010-04-07T15:23:16.370 に答える