这可能是一个愚蠢的问题,但......我有两个进程P1和P2。 P1可以在共享内存中轻松地分配对象O吗? (P1使用管道向P2传递指向O的指针)。类似的东西:
// P1
ptr1 = new SharedMemoryObject(); // object O
pipe.send(ptr1)
// P2
ptr = pipe.recieve()
// I have access to O now
我想避免序列化和管道化对象,我想在共享内存中创建它们并传递指针
答案 0 :(得分:3)
没有。 P1的指针对P2没有意义。
但是,您可能希望阅读“基础指针”,这对于进程间通信更有效。
作为副作用,任何在内部使用普通指针(而不是基于指针)的类都不能以这种方式共享。
答案 1 :(得分:3)
每个进程都有自己的地址空间,这意味着虽然可以在两个进程之间共享物理内存地址,但这可能对应于每个进程的地址空间中的不同地址。这意味着在设计将存在于共享内存中的对象时,必须确保它们使用偏移量或索引而不是纯指针。
共享内存会产生同步问题,导致问题无法解决,所以除非您真的需要,否则我建议您使用管道路径优先于共享内存。
答案 2 :(得分:0)