共有メモリを使って複数のプログラム間でいくつかのオブジェクトを共有したい。共有メモリ内で演算子 `new`と` delete`を使うにはどうすればいいですか?
私はthis siteに例を見つけました。オブジェクトの割り当てはありません。直接アドレッシングだけですが、共有メモリに構造体やクラスを作成したいのです。
共有メモリを使って複数のプログラム間でいくつかのオブジェクトを共有したい。共有メモリ内で演算子 `new`と` delete`を使うにはどうすればいいですか?
私はthis siteに例を見つけました。オブジェクトの割り当てはありません。直接アドレッシングだけですが、共有メモリに構造体やクラスを作成したいのです。
メモリがすでに新しい配置使用したい割り当てられているので:
void * ptr = shmat(shmid, 0, 0);
// Handle errors
MyClass * x = new (ptr) MyClass;
その後、MyClass
の新しいインスタンスがptr
が指すメモリに構築されます。
オブジェクトが不要な場合は、(メモリを解放せずに)デストラクタを手動で呼び出す必要があります。
ptr->MyClass::~MyClass();
オブジェクトは、新しい配置を使用して任意の適切な整列ストレージに作成することができます。
void* storage = get_aligned_shared_memory();
T* object = new (storage) T();
言った - あなたは、このようなこのためBoost.Interprocessとしてライブラリを使用して検討しました。
私が探していたライブラリです。 – kravemir