【发布时间】:2012-05-18 03:06:30
【问题描述】:
我想使用共享内存在多个程序之间共享一些对象。
我在this site 找到了示例。它没有任何对象分配,只是直接寻址,但我想在共享内存中创建结构或类。
【问题讨论】:
标签: c++ memory-management shared-memory
我想使用共享内存在多个程序之间共享一些对象。
我在this site 找到了示例。它没有任何对象分配,只是直接寻址,但我想在共享内存中创建结构或类。
【问题讨论】:
标签: c++ memory-management shared-memory
可以使用placement new 在任何合适的对齐存储中创建对象:
void* storage = get_aligned_shared_memory();
T* object = new (storage) T();
也就是说,您是否考虑过为此使用诸如 Boost.Interprocess 之类的库。
【讨论】:
因为内存已经分配,你想使用placement new:
void * ptr = shmat(shmid, 0, 0);
// Handle errors
MyClass * x = new (ptr) MyClass;
然后,MyClass 的新实例将在ptr 指向的内存中构造。
当不需要对象时,你必须手动调用析构函数(不释放内存)。
ptr->MyClass::~MyClass();
【讨论】: