7

共有メモリを使用して、複数のプログラム間でいくつかのオブジェクトを共有したい。

このサイトで例を見つけました。オブジェクトの割り当てはなく、直接アドレス指定するだけですが、共有メモリに構造体またはクラスを作成したいと思います。

4

2 に答える 2

11

メモリは既に割り当てられているため、配置 newを使用します。

void * ptr = shmat(shmid, 0, 0);
// Handle errors
MyClass * x = new (ptr) MyClass;

次に、 の新しいインスタンスがMyClassが指すメモリに構築されptrます。

オブジェクトが不要な場合は、(メモリを解放せずに) デストラクタを手動で呼び出す必要があります。

ptr->MyClass::~MyClass();
于 2012-05-09T15:11:01.860 に答える
7

オブジェクトは、配置newを使用して、適切に整列されたストレージに作成できます。

void* storage = get_aligned_shared_memory();
T* object = new (storage) T();

そうは言っても、このためにBoost.Interprocessなどのライブラリを使用することを検討しましたか。

于 2012-05-09T15:10:21.417 に答える