boost::interprocess - allocate_aligned в разделяемой памяти?

Если я использую 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, и, очевидно, я должен упустить какой-то фундаментальный момент, касающийся того, как идентифицировать анонимные распределения.


person Paul R    schedule 16.11.2012    source источник


Ответы (1)


Пример из документов включены ниже. Это применимо к указателям на память, возвращаемым методом allocate_aligned, а также к ванильному методу выделения.

//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)
person Josh Heitzman    schedule 16.11.2012
comment
А, спасибо - идея отправки смещения от одного процесса к другому мне не пришла в голову - я думаю, дескриптор мог бы даже находиться в именованном распределении в общей памяти. - person Paul R; 16.11.2012