c++ - 是否可以将 std::vector 放置到共享内存中?

标签 c++ stl

我会使用 CreateFileMapping() windows API 函数在共享内存中创建 std::vector。我知道如何创建共享内存并对其进行管理,但是如何将 std::vector 放置到内存中的固定地址? 在我的情况下,我不能使用 boost 或其他库,我使用的是 CBuilder++ 2010。 我认为可能使用的一种变体

std::vector<int> myVec; 
myVec *mv;
mv = shared_memory_addr ?

但是我如何检测 vector 的实际大小以调整内存大小?

最佳答案

我会使用 Boost.Interprocess,它解释了如何做到这一点: http://www.boost.org/doc/libs/1_38_0/doc/html/interprocess/quick_guide.html#interprocess.quick_guide.qg_interprocess_container

请注意,这不使用 std::vector<> ,它不适合共享内存使用,因为它通常是根据三个指针(开始、结束、容量或某些等价物)实现的,并且地址在进程之间会有所不同。所以 Boost.Interprocess 有它自己的 vector 类,它是专门为你想要做的事情而构建的。

关于c++ - 是否可以将 std::vector 放置到共享内存中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5363602/

相关文章:

c++ - 16CU1 的 openCV 查找表

c++ - 使用 RegQueryValueEx 从注册表中获取机器名称

c++ - C++ 中线段树的 STL

c++ - std::max_element 编译错误,C++

c++ - 以 STL 样式创建类的模板化方法

c++ - 是否可以为const操作指定一个private成员变量public?

c++ - 十进制包括负到 32 位二进制转换器

c++ - 如何在 map 的前 3 个值上使用 std::accumulate

c++ - boost::range 处理容器的内容,并使用映射中的值管道到下一个进程

从基类继承的C++公共(public)方法不能访问派生类中的私有(private)成员变量