C++ boost::managed_shared_内存能否正确处理向量?

C++ boost::managed_shared_内存能否正确处理向量?,c++,vector,boost,stl,C++,Vector,Boost,Stl,下面是在进程之间共享内存中使用vector的官方示例: 不过,我仍有一些顾虑: 如果向量需要重新分配新内存(例如,在几次推回之后),该怎么办 如果向量不断增加,最终消耗所有初始化的内存,该怎么办 与原始STL向量相比,性能损失是多少 它通过自定义ShmemAllocator完成此操作。分配器就是这样工作的:您将调用new的标准堆分配器替换为Boost的从共享内存段进行分配的堆分配器 与使用标准分配器耗尽内存的行为相同:将抛出异常(而不是std::bad_alloc:而是boost::进程间::

下面是在进程之间共享内存中使用vector的官方示例:

不过,我仍有一些顾虑:

  • 如果向量需要重新分配新内存(例如,在几次推回之后),该怎么办

  • 如果向量不断增加,最终消耗所有初始化的内存,该怎么办

  • 与原始STL向量相比,性能损失是多少

  • 它通过自定义
    ShmemAllocator
    完成此操作。分配器就是这样工作的:您将调用
    new
    的标准堆分配器替换为Boost的从共享内存段进行分配的堆分配器

  • 与使用标准分配器耗尽内存的行为相同:将抛出异常(而不是
    std::bad_alloc
    :而是
    boost::进程间::bad_alloc

  • 您需要对Boost的分配器的分配速度进行基准测试,并将其与默认的
    std::allocator
    进行比较。向量本身并不重要


  • 这里有两个独立的实体

  • 载体
  • 分配器
  • 当您将
    矢量创建为

    vector <int> v1;
    
    其中内存分配器从默认分配器更改为共享内存分配器

    因此,vector的功能独立于所使用的内存分配器


    关于这些问题,内存的可用性和分配的速度取决于分配器,而不是向量,只要分配器设法获得一些内存,向量就会继续执行。

    不想推我自己的答案,但我有/many/answers使用Boost Interprocess,显示了使用(范围/级联)的优势分配器为您的(嵌套的)(容器)正确执行所有这些操作classes@sehe我发现了它们:从技术上讲,Boost.Interprocess
    Boost::Interprocess::vector
    Boost::container::vector
    的类型定义(而不是
    std::vector
    )。我认为STL向量的可定制性不足以处理偏移指针
    offset\u ptr
    vector<int, allocator<int>> v1; 
    
    typedef vector<int, ShmemAllocator> MyVector