我正在寫一個簡單的wrappers,用於實現IPC中共享內存(shm)中的環形緩衝區,它是boost :: interprocess的向量容器。假設buf
是在shm中創建的RingBuffer
的實例。現在,在其中,buf
本身分配專用的數據成員來存儲值,例如, m_data
。我的問題是:我認爲m_data
也應該在共享內存中創建。但這是必要的嗎?有關共享內存中的C++容器類的快速設計問題
如果在shm本身創建的buf
會分配標準內存,即使用new
會發生什麼情況。這是否分配在調用進程的堆上?我不認爲buf
是在那裏分配的,那麼如何將不在進程堆中的對象的私有數據成員分配到那裏。我很困惑。
謝謝史蒂夫,這清除了我很多的困惑。餘下的問題是:在shm中創建的'buf'類應該使用'boost :: interprocess :: vector'還是'std :: vector'來存儲它的數據?我認爲這應該是增強版,只是想知道這是否正確。 – recipriversexclusion 2010-03-17 04:27:57
是的,它必須是進程間。 'std :: vector'分配內存並存儲指針。默認情況下,它使用'new'分配,如我們所知,這將是錯誤的。但是,即使給'std :: vector'分配了一個從共享內存中分配的分配器,它仍然是錯誤的,因爲共享內存可能不會映射到所有進程中的相同地址範圍,如果它不是那麼指針將無法工作。 'boost :: interprocess :: vector'爲你處理。 – 2010-03-17 04:53:34