[英]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.