假设我有课Base
and Derived : public Base
。
我使用 boost::interprocess 库构建了一个共享内存段。是否可以有类似这样的代码:
Base* b = new Derived();
write(b); //one app writes
Base* b2 = read(b); //second app reads
//b equals b2 (bitwise, not the ptr location)
我在这里看到的问题是,例如,Base 的派生类所需的空间是未知的(那么要分配多少 shmem?)
Q:如何在应用程序之间通过指针传递对象?
只需阅读其文档
尤其:
虚拟禁止
虚表指针和虚表在地址中
构造对象的过程的空间,所以如果我们放置一个
具有虚函数或虚基类的类,虚函数
放置在共享内存中的指针对于其他进程来说是无效的
他们会崩溃。
这个问题很难解决,因为每个进程都需要一个
不同的虚拟表指针和包含该指针的对象
指针在许多进程之间共享。即使我们映射了映射的
每个进程中同一地址的区域,虚拟表可以是
在每个进程的不同地址中。启用虚拟功能
对于进程之间共享的对象,需要进行深度编译器更改
虚拟函数的性能会受到影响。这就是为什么
Boost.Interprocess没有任何支持虚函数的计划
以及进程之间共享的映射区域中的虚拟继承。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)