2012-11-16 146 views
1

如果我使用allocate_aligned在共享內存塊中分配一個對齊的內存塊,那麼如何在另一個進程中識別同一個塊?例如。boost :: interprocess - 在共享內存中allocate_aligned?

managed_shared_memory managed_shm(open_or_create, "SharedMemory", 65536); 
void *ptr = managed_shm.allocate_aligned(256, 16); 

如何從其他進程中找到ptr

對於不對齊的分配,我只使用find_or_construct,然後顯然有一個名稱與分配相關聯,從而可以從另一個進程中找到分配。然而,似乎沒有任何方法可以與find_or_construct進行對齊分配,顯然我必須錯過如何識別匿名分配的一些基本點。

回答

1

來自docs的示例包含在下面。這適用於返回allocate_aligned方法的內存指針以及vanilla分配方法。

//Process A obtains the offset of the address 
managed_shared_memory::handle handle = 
    segment.get_handle_from_address(processA_address); 

//Process A sends this address using any mechanism to process B 

//Process B obtains the handle and transforms it again to an address 
managed_shared_memory::handle handle = ... 
void * processB_address = segment.get_address_from_handle(handle) 
+0

啊謝謝 - 從一個進程發送偏移到另一個進程的想法並沒有發生在我身上 - 我猜測這個句柄甚至可能進入共享內存中的命名分配。 –

相關問題