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

sib*_*nez 3 c++ winapi stl boost-interprocess

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

  • 我的第一次尝试是在Win32中使用命名共享内存,但问题是我不能使用STL容器.
  • 寻找解决方案,我发现了Boost Interprocess,如果我理解,我必须将我的类中的所有STL容器更改为"STL"Boost Interprocess容器.

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

谢谢

eca*_*mur 7

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

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

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

或者,您可以在每个进程中将内存映射到同一个虚拟地址 ; 如果你这样做,那么你可以使用现有的实现容器,因为原始指针将正常工作.