2016-02-05 92 views
0

我需要在共享內存中放置STL映射。還有多個映射的進程訪問。任何指向它是如何完成的?共享內存中的C++ STL映射

我已經檢查過這個鏈接。但需要一個更簡單的方法。 Map in Shared memory

+2

使用增強,因爲這是一個有點痛苦的實現。或者你受限於你可以使用的庫? – Joe

+0

不要。 STL實現的映射不太可能是二進制穩定的。 –

+0

@BillyONeal,假設你指的是ABI的穩定性,並且即使假定這是真的,當然如果所有進程都使用相同的編譯器版本而不是問題? (還有其他問題,但我不認爲這是其中的一個!) –

回答

0

對於這個工作,你需要使用一個自定義的分配器將從共享內存區域分配,使地圖節點都在共享內存中,從而使pointer型分配器的不只是一個原始指針,但可以在映射到不同進程中的不同地址時引用共享內存區域。

您還需要你的std::map實現正確使用分配的pointer到處它需要使用一個指針,而這個isn't guaranteed by the standard

當前最簡單的方法是使用Boost.Interprocess,它爲共享內存提供了一個很好的API,並提供了與它一起正常工作的分配器和容器。