我有一个针对char指针的mmap类型转换
char * ptr;
ptr =(char *)mmap(0,FILESIZE,PROT_READ | PROT_WRITE,MAP_SHARED,fd,0);
这是我之前的代码。但是现在我想在需求发生变化时使用地图而不是char *。
现在,我的地图被声明为 地图< int,string> i_s_map;
如何更改我的mmap调用以指向地图?
答案 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进程库用于在共享内存中工作的某些分配器。