在子进程之间共享指针
Share pointer between subprocesses
我有一个64位应用程序,它通过popen2实现创建了2个子进程(32位)。
我需要两个子进程访问内存中的同一个对象,我不知道如何做到这一点。
如果我理解正确的话,每个子进程都有一个不同的内存映射,因此我不能在两个子进程之间传递内存地址。
附加信息:目标平台是Mac ,但我正在寻找一个尽可能与平台无关的答案 Mac特定的答案很好,我可能不会在其他平台上使用这种方法。我只是对使用线程了解不够;我选择这条路线是因为子进程必须是32位的。
可以使用共享内存概念。这意味着,你分配(使用操作系统服务)一个内存,这将是可见的两个子进程。
根据wiki的建议,您可以使用boost.interprocess在平台无关的级别上使用共享内存。
这是个难题。
你是正确的,每个进程都有自己的地址空间。一个进程创建的对象不能被另一个进程访问。
可以使用共享内存,并将对象放在那里。一个复杂的情况是,通常共享内存段将以不同的地址映射到每个进程的地址空间。这意味着你不能在那些对象中使用指针。这可以通过使用索引而不是指针来缓解。
此外,如果进程A是32位,进程B是64位,则原语类型(如long
)可以具有不同的宽度。因此,在这种情况下共享数据时,您需要使用固定宽度类型,如int32_t
。
最后一个复杂的问题是同步:如果一个进程可以在另一个进程读取或修改对象时修改它,则需要引入进程间同步。
相关文章:
- 如何从具有移动语义的类对象中生成共享指针
- 使用共享指针的函数调用,其对象应为 const
- 共享指针和具有自定义删除程序的唯一指针之间的语法差异背后的任何原因
- 如何访问由共享指针保存的类方法?
- 从矢量或地图中删除共享指针
- 使用共享指针时,从共享指针本身释放内存的机制是什么
- 使用共享指针实现复制 c'tor?
- C++/QT:使用指向私有成员的常量指针作为只读数据共享
- 共享指针继承,而不先显式强制转换
- 如何检查类中共享指针的有效性?
- 共享 C++ 的数据成员指针
- std::排序在共享指针的向量上
- 将相同共享指针的副本存储在不同的向量中是否是一种好的做法?
- 在什么情况下,需要共享智能指针而无法使用唯一指针?
- 嵌套类、继承和C++中的共享指针
- <Base> <Derived> 具有相同原始指针共享引用的 shared_ptr 和 shared_ptr 实例是否计数?
- 重载流<<运算符,用于指针/共享指针和其他类型的
- RAW指针共享_ptr
- 指针共享习语
- 将memmove函数与临时指针共享相同的地址