C++ boost::managed_shared_内存能否正确处理向量?
下面是在进程之间共享内存中使用vector的官方示例: 不过,我仍有一些顾虑:C++ boost::managed_shared_内存能否正确处理向量?,c++,vector,boost,stl,C++,Vector,Boost,Stl,下面是在进程之间共享内存中使用vector的官方示例: 不过,我仍有一些顾虑: 如果向量需要重新分配新内存(例如,在几次推回之后),该怎么办 如果向量不断增加,最终消耗所有初始化的内存,该怎么办 与原始STL向量相比,性能损失是多少 它通过自定义ShmemAllocator完成此操作。分配器就是这样工作的:您将调用new的标准堆分配器替换为Boost的从共享内存段进行分配的堆分配器 与使用标准分配器耗尽内存的行为相同:将抛出异常(而不是std::bad_alloc:而是boost::进程间::
ShmemAllocator
完成此操作。分配器就是这样工作的:您将调用new
的标准堆分配器替换为Boost的从共享内存段进行分配的堆分配器std::bad_alloc
:而是boost::进程间::bad_alloc
)std::allocator
进行比较。向量本身并不重要这里有两个独立的实体
矢量创建为
vector <int> v1;
其中内存分配器从默认分配器更改为共享内存分配器
因此,vector的功能独立于所使用的内存分配器
关于这些问题,内存的可用性和分配的速度取决于分配器,而不是向量,只要分配器设法获得一些内存,向量就会继续执行。不想推我自己的答案,但我有/many/answers使用Boost Interprocess,显示了使用(范围/级联)的优势分配器为您的(嵌套的)(容器)正确执行所有这些操作classes@sehe我发现了它们:从技术上讲,Boost.InterprocessBoost::Interprocess::vector
是Boost::container::vector
的类型定义(而不是std::vector
)。我认为STL向量的可定制性不足以处理偏移指针offset\u ptr
。
vector<int, allocator<int>> v1;
typedef vector<int, ShmemAllocator> MyVector