【问题标题】:C++ STL map in shared memory共享内存中的 C++ STL 映射
【发布时间】:2016-02-05 10:42:34
【问题描述】:

我需要在共享内存中放置一个 STL 映射。也有多个进程访问该映射。任何关于它是如何完成的指针?

我已经检查了这个链接。但需要更简单的方法。 Map in Shared memory

【问题讨论】:

  • 使用 boost,因为这有点难实现。或者您是否受制于可以使用的库?
  • 不要。您的 STL 实现的映射不太可能是二进制稳定的。
  • @BillyONeal,假设您指的是 ABI 稳定性,甚至假设这是真的,如果所有进程都使用相同的编译器版本,那肯定不是问题吗? (让它工作还有其他问题,但我不认为这是其中之一!)
  • @JonathanWakely:实际上让每个人都使用相同的编译器版本对人们来说是一个很大的障碍:)
  • @BillyONea,这两个主要的非 Microsoft std::lib 实现确实具有稳定 ABI 的原因之一 :)

标签: c++ dictionary stl shared-memory


【解决方案1】:

为此,您需要使用从共享内存区域分配的自定义分配器,以便映射节点都在共享内存中,并且分配器的 pointer 类型不仅仅是原始的指针,但在不同进程映射到不同地址时可以引用共享内存区域。

您还需要您的std::map 实现来正确使用分配器的pointer 类型任何地方它需要使用一个指针,而这个isn't guaranteed by the standard

目前最简单的方法是使用 Boost.Interprocess,它为共享内存提供了一个很好的 API,还提供了可以正常工作的分配器和容器。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-04-06
    • 1970-01-01
    • 2012-09-08
    • 1970-01-01
    • 2023-04-11
    • 1970-01-01
    • 2015-06-01
    相关资源
    最近更新 更多