可以正确提升:: managed_shared_memory句柄向量吗?

时间:2017-01-16 09:03:20

标签: c++ vector boost stl

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

http://www.boost.org/doc/libs/1_55_0/doc/html/interprocess/quick_guide.html#interprocess.quick_guide.qg_interprocess_container

但是我仍有一些担忧:

  1. 如果向量需要重新分配新内存(例如在几次push_back之后)会怎么样?

  2. 如果向量继续增加并最终消耗所有已初始化的内存会怎样?

  3. 通过与原始STL向量进行比较,性能损失是什么?

2 个答案:

答案 0 :(得分:1)

  1. 它是通过自定义ShmemAllocator完成的。这就是分配器的工作原理:你换掉了标准的堆分配器,它为Boost的共享内存段分配了一个调用new

  2. 与使用标准分配器耗尽内存的行为相同:将抛出异常(但不是std::bad_alloc:而是apparently boost::interprocess::bad_alloc代替。

  3. 您需要对Boost的分配器的分配速度进行基准测试,并将其与std::allocator的分配速度进行比较,这是默认值。载体本身并不重要。

答案 1 :(得分:0)

这里有2个独立的实体

  1. 矢量
  2. 分配器
  3. 当您将vector创建为

    vector <int> v1;
    

    实际上是

    vector<int, allocator<int>> v1; 
    

    我们不提供任何内存分配器,因为它是defult分配器。

    现在,在Boost.Interprocess通信的情况下,矢量被创建为

    typedef vector<int, ShmemAllocator> MyVector
    

    将内存分配器从Default Allocator更改为Shared Memory Allocator。

    因此,vector的功能与使用哪个内存分配器无关。

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