如何使用mmap指向STL类型?

时间:2010-04-16 01:28:41

标签: c++ stl mmap

我有一个针对char指针的mmap类型转换

char * ptr;

ptr =(char *)mmap(0,FILESIZE,PROT_READ | PROT_WRITE,MAP_SHARED,fd,0);

这是我之前的代码。但是现在我想在需求发生变化时使用地图而不是char *。

现在,我的地图被声明为 地图< int,string> i_s_map;

如何更改我的mmap调用以指向地图?

2 个答案:

答案 0 :(得分:6)

您不希望将STL容器存储在共享内存中,至少不要共享它们。原因是它们严重依赖堆分配,因此开箱即用的std::map将保留指向不同进程的虚拟地址空间的指针。

看看boost::interprocess是否有办法在C ++中处理这种情况。

答案 1 :(得分:2)

如果要在mmap返回的内存中创建一个地图对象,请使用placement new。

map<int,string> *i_s_map = new(ptr) map<int,string>();

这将在内存中创建地图对象本身。为了将映射中的元素放入内存,您需要创建一个自定义分配器来将数据保存在内存中。您可以将boost进程库用于在共享内存中工作的某些分配器。

http://www.boost.org/doc/libs/1_42_0/doc/html/interprocess/allocators_containers.html#interprocess.allocators_containers.allocator_introduction