系统相关
首页 > 系统相关> > c – 共享内存中的STL容器(Windows)

c – 共享内存中的STL容器(Windows)

作者:互联网

我正在开发一个由2个进程组成的应用程序,这些进程必须共享一些数据结构.这些类组织在不同的库中,库用于不同的应用程序.

>我的第一次尝试是在Win32中使用Named Shared Memory,但问题是我不能使用STL容器.
>寻找解决方案,我找到了Boost Interprocess,如果我理解,我必须将我的类中的所有STL容器更改为“STL”Boost Interprocess容器.

那么,有没有其他方法可以使用STL共享类或结构(在Windows中)?目标是不要在我们的库中创建过多的Boost依赖.

谢谢

解决方法:

Boost.Interprocess有自己的容器类的原因是大多数当前的实现不完全支持分配器的标准.

Boost.Interprocess容器类是标准容器的完全兼容的实现,因此您可以将它们用作标准容器的插入替换,并在修复它们时切换到供应商提供的容器以支持标准分配器协议.

我不确定我是否可以比documentation更好地解释它,但最大的问题是共享内存映射到不同虚拟地址的不同进程,因此容器中使用的任何指针必须是相对指针(例如来自该部分的开头).标准分配器模型支持这一点,但容器也必须通过使用Allocator :: pointer而不是T *来支持它.修复所有实现以支持此操作后,将不再需要Boost.Interprocess容器.

或者,您可以映射内存at the same virtual address in each process;如果你这样做,那么你可以使用现有的实现容器,因为原始指针将正常工作.

标签:c,stl,winapi,boost-interprocess
来源: https://codeday.me/bug/20190723/1511771.html