C ++,static_cast是否安全无效*并跨进程返回?

时间:2018-01-31 02:52:13

标签: c++ ipc type-safety static-cast memory-safety

我在Linux系统上有两个相同的二进制文件同时运行(不同的命令行参数,所以他们做了不同的事情)。在一个过程中,我将一个对象记忆到一些共享内存区域;在另一个过程中,我检索具有正确大小的对象,并获得指向它的指针void*,并static_cast指向原始类型的指针。

这被认为是安全的吗?该对象不一定是POD。

2 个答案:

答案 0 :(得分:2)

这不安全,因为你无法记忆一个不是非常复杂的对象。例如,您无法通过调用memcopy来移动/复制std::vector,这可能会导致很多问题。但是,您可以将对象构造到共享内存段中。我强烈建议看一下boost interprocess;即使您不使用它,这些示例也会让您了解可能的情况:http://www.boost.org/doc/libs/1_63_0/doc/html/interprocess/sharedmemorybetweenprocesses.html

答案 1 :(得分:0)

语言对共享内存没有任何说明,因此从这个意义上讲,问题是无法回答的。在实践中,对可轻易复制的限制是正确的想法;因为允许通过memcpy给出这样的对象值,所以编译器通常不会进行任何不幸的优化。

您必须注意在不同进程中的不同地址加载的内存。如果对象包含没有指针,则可以忽略它。如果是,您可能需要offset_ptr