簡體   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