繁体   English   中英

C ++,将static_cast转换为void *并跨进程返回是否安全?

[英]C++, Is it safe to static_cast to void* and back across processes?

我在Linux系统上同时运行两个相同的二进制文件(不同的命令行参数,因此它们在做不同的事情)。 在一个过程中,我将一个对象复制到某个共享的内存区域中。 然后在另一个过程中,我以正确的大小检索对象,并以void*获取指向它的指针,并static_cast指向原始类型的指针。

这算安全吗? 对象不一定是POD。

这是不安全的,因为您不能存储不能被trivially_copyable的对象。 例如,您不能通过在其上调用memcopy来移动/复制std::vector ,这可能会导致很多问题。 但是,您可以将对象构造到共享内存段中。 我强烈建议您看一下Boost进程。 即使您不使用它,这些示例也会带给您一些可能的感觉: http : //www.boost.org/doc/libs/1_63_0/doc/html/interprocess/sharedmemorybetweenprocesses.html

语言没有对共享内存进行任何说明,因此从这个意义上讲,这个问题是无法回答的。 实际上,限制普通复制是正确的想法。 由于允许通过memcpy为此类对象提供值,因此编译器通常不会进行任何不幸的优化。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM