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