代码之家  ›  专栏  ›  技术社区  ›  Michael Kohne

有人有一个好的C++共享内存容器吗?

  •  8
  • Michael Kohne  · 技术社区  · 17 年前

    我一直希望有一个STLish容器,可以放在共享内存段或内存映射文件中。

    我考虑过使用自定义分配器和新的放置方式将常规STL容器放置在共享内存段中。(就像这个ddj article ).问题是STL容器内部会有指向它们所拥有的内存的指针。因此,如果共享内存段或内存映射文件在不同的基址加载(可能是在后续运行中,或在第二个进程中),则内部指针突然无效。据我所知,只有当您始终可以将内存段映射到同一地址的进程中时,自定义分配器方法才有效。至少对于内存映射文件,我有很多经验,如果你只是让系统将其映射到任何感觉的地方,情况就不会是这样。

    我对如何做到这一点有一些想法,但如果其他人已经完成了这项工作(那就是我,懒惰),我想避免这样做。

    我目前将锁定排除在讨论之外,因为最好的锁定策略高度依赖于应用程序。

    5 回复  |  直到 17 年前
        1
  •  12
  •   grieve    13 年前

    最好的起点可能是boost进程间库。他们在共享内存中有一个很好的地图示例: interprocess map

    您可能还想阅读关于偏移智能指针的部分,它解决了您提到的内部指针问题。 Offset Pointer

        2
  •  0
  •   Pat Notz    17 年前
        3
  •  0
  •   gbjbaanb    17 年前

    (几年前)我总是有很好的经历 ACE 它是一个网络/通信框架,但有一节是关于共享内存的。

        4
  •  0
  •   Sanjaya R    17 年前

    我只知道专有版本。 Bloomberg EA 他们都发表了关于STL版本的文章,但(据我所知)还没有发布他们的劳动成果。

        5
  •  -1
  •   Ankur Gupta    16 年前

    尝试使用Qt的QSharedMemory实现。