gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 19:59:35 25 4
gpt4 key购买 nike

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

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

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

谢谢

最佳答案

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

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

我不确定我是否能比 documentation 更好地解释它,但最大的问题是共享内存映射到不同虚拟地址的不同进程,因此容器内使用的任何指针必须相对指针(例如从一开始段)。标准分配器模型支持这一点,但容器也必须通过使用 Allocator::pointer 而不是 T * 来支持这一点。当所有实现都固定支持此功能时,将不再需要 Boost.Interprocess 容器。

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

关于c++ - 共享内存中的 STL 容器 (Windows),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12477713/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com