8

私は長い間、共有メモリ セグメントまたはメモリ マップ ファイルに配置できる STLish コンテナーを望んでいました。

通常の STL コンテナを共有メモリ セグメントに配置するために、カスタム アロケータと新しい配置を使用することを検討しました。(このddj記事のように)。問題は、STL コンテナーが、所有するメモリへのポインターを内部的に持つことです。したがって、共有メモリ セグメントまたはメモリ マップド ファイルが別のベース アドレスにロードされると (おそらく、後続の実行時または 2 番目のプロセスで)、内部ポインターが突然無効になります。私が知る限り、カスタム アロケーターのアプローチは、メモリ セグメントを常に同じアドレスのプロセスにマップできる場合にのみ機能します。少なくともメモリマップされたファイルでは、システムが好きなようにマップできるようにするだけでは、そうではないという経験がたくさんあります。

これを行う方法についていくつかの考えがありましたが、他の誰かが既に作業を行っている場合は避けたいと思います (怠け者の私です)。

最良のロック戦略はアプリケーションに大きく依存するため、現在、ロックについては議論から除外しています。

4

5 に答える 5

12

これを開始するのに最適な出発点は、おそらくブースト Interprocess ライブラリです。ここに共有メモリ内のマップの良い例があります: プロセス間マップ

おそらく、参照していた内部ポインターの問題を解決するオフセットスマートポインターに関するセクションも読みたいと思うでしょう。 オフセット ポインター

于 2008-11-04T18:48:06.950 に答える
0

インテルスレッディングビルディングブロック(TBB)コンテナーをチェックアウトすることもできます。

于 2008-11-04T19:05:57.257 に答える
0

私はACEで (何年も前に) 常に良い経験をしました。ネットワーク/通信フレームワークですが、共有メモリに関するセクションがあります。

于 2008-11-05T22:40:06.810 に答える
0

私は独自のバージョンしか知りません。 BloombergEAはどちらも STL バージョンについて公開していますが、(私の知る限りでは) 彼らの努力の成果を公開していません。

于 2008-11-10T20:26:57.360 に答える
-1

Qt の QSharedMemory 実装を使用してみてください。

于 2009-11-04T09:51:40.363 に答える