可以用简单的static_cast代替序列化来检索C ++中两个进程之间共享的数据吗?

时间:2018-06-26 09:32:20

标签: c++ serialization boost shared-memory interprocess

比方说,我有一个用C ++编写的进程,其中有许多类A的实例。

class A {
   std::vector<std::vector<short>> tab;
   /* other random data */
}

创建后,这些对象应由其他应用程序的其他进程(也使用C ++)进行访问(只读)。

我不惜一切代价避免制作副本或移动对象,因为这会显着增加内存消耗,并可能花费更多时间。

一个“简单”的可移植解决方案是序列化共享内存中的对象,然后在询问数据时,该过程将仅给出内存中A类的各种实例的位置,第二个过程将反序列化他们在能够读取数据之前。 这意味着,每当一个进程想要读取数据时,我们将创建一个副本。这就是我要避免的事情。

鉴于两个进程都是用C ++编写的,并且都知道A类的定义,是否有可能避免序列化并因此避免数据的复制/移位?当然,它不再是便携式的,但也不必是便携式的。

通过共享内存的简单static_cast是否可以让第二个进程自己读取其中的数据,而无需进行任何类型的处理,因此不花费时间,也不需要任何额外的内存?

如果没有,是否有一种更简单的序列化形式添加一个开销,该开销将使第二个进程无需复制就可以理解和读取数据?

0 个答案:

没有答案