[英]How to use mmap to point to STL type?
我将mmap类型转换为char指针
char * ptr;
ptr =(char *)mmap(0,FILESIZE,PROT_READ | PROT_WRITE,MAP_SHARED,fd,0);
这是我以前的代码。 但是现在我要使用地图而不是char *,因为需求已更改。
现在,我的地图声明为map <int,string> i_s_map;
如何更改mmap调用以指向地图?
您不想将STL容器存储在共享内存中,至少不要共享它们。 原因是它们严重依赖堆分配,因此开箱即用的std::map
将保存来自不同进程的虚拟地址空间的指针。
看一下boost::interprocess
,这是一种在C ++中处理这种情况的方法。
如果要在mmap返回的内存中创建地图对象,请使用new放置。
map<int,string> *i_s_map = new(ptr) map<int,string>();
这将在内存中创建地图对象本身。 为了使映射内的元素进入内存,您将需要创建一个自定义分配器以将数据保留在内存中。 您可以将boost进程间库用于在共享内存中工作的某些分配器。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.