2017-07-26 57 views
0

在Boost.Interprocess中文檔Where is this being allocated?中指出,Boost.Interprocess中容器使用在同一時間兩種機制放置在共享存儲器:Boost.Interprocess中存儲器位置

  • Boost.Interprocess中構造 <>,find_or_construct <> ...功能。這些函數將C++對象放入共享的內存中。但是這隻放置對象,而不是這個對象可以動態分配的內存。
  • 共享內存分配器。這些允許分配共享內存部分,以便容器可以動態地分配內存的片段來存儲新插入的元素。

什麼是用例爲具有boost.vector其中內部存儲器住在當前過程,但使用的共享存儲器分配器,使得元件被放置在共享存儲器?

如果我想分享這個結構到另一個進程:

struct Shared 
{ 
    vector<string> m_names; 
    vector<char> m_data; 
}; 

我想我要的載體可訪問到其他進程,這樣就可以對其進行迭代,對不對?

回答

2

find_or_construct和朋友是你自己的直接分配。

分配器將被傳遞給庫類型以類似的方式進行內部分配。否則,只有「控制結構」(例如,典型的std::string的16個字節)將在共享存儲器中,而不是在內部由標準庫容器分配的所有相關數據。

0

那麼,你不能從另一個進程訪問這個向量,但是你可以訪問這些元素(例如你的例子中的字符串),例如通過指針