linux共享内存放stl容器,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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值