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

1

Решение

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

//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)
1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector