繁体   English   中英

如何使用mmap指向STL类型?

[英]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进程间库用于在共享内存中工作的某些分配器。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM