2012-11-16 159 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

啊谢谢 - 从一个进程发送偏移到另一个进程的想法并没有发生在我身上 - 我猜测这个句柄甚至可能进入共享内存中的命名分配。 –

相关问题