2008-11-04 16 views
8

我一直渴望一個STLish容器,我可以把它放到共享內存段或內存映射文件中。任何人都有一個良好的C++共享內存容器?

我已經考慮過使用自定義分配器和放置new將常規STL容器放到共享內存段中。 (像這樣ddj article)。問題是STL容器將在內部擁有指向它們擁有的內存的指針。因此,如果共享內存段或內存映射文件加載到不同的基址(可能在後續運行或第二個進程中),則內部指針突然無效。就我所知,自定義分配器方法僅適用於如果您始終可以將內存段映射到您的進程中相同的地址。至少在內存映射文件方面,如果您只是讓系統將其映射到任何感覺上,我都有很多經驗。

我對如何做到這一點有一些想法,但是如果其他人已經完成了這項工作(這是我,懶惰),我想避免它。

由於最佳鎖定策略是高度依賴於應用程序的,我目前正在退出討論。

回答

12

這個最好的起點可能是提升Interprocess庫。他們在這裏有一個共享內存映射的例子: interprocess map

您可能還想閱讀關於偏移智能指針的部分,它解決了您所指的內部指針問題。 Offset Pointer

+1

我使用個人經驗支持這個答案。使用IPC製作的在線指南輕而易舉! www.boost.org/doc/libs/1_36_0/doc/html/interprocess/quick_guide.html www.boost.org/doc/libs/1_36_0/doc/html/interprocess/sharedmemorybetweenprocesses.html#interprocess.sharedmemorybetweenprocesses.mapped_file – pestophagous 2008-11-06 16:38:17

0

我總是有很好的經驗(幾年前)與ACE。它是一個網絡/通信框架,但有一個共享內存部分。

0

我只知道專有版本。 BloombergEA都發布了關於他們的STL版本,但沒有發佈(據我所知)他們的勞動成果。

+0

把彭博社開發的「BDE」庫作爲「STL版本」的特徵描述出來,這是誤導性的 - 接口和折衷方案是截然不同的。 – 2012-05-09 02:56:59

-1

嘗試使用Qt的QSharedMemory實現。

+0

我只是看着QSharedMemory - 它只是給共享內存訪問,它不給任何類型的容器。 – 2009-11-04 11:58:28

相關問題