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 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) 
+0

아 덕분에 - 전송의 아이디어 다른 하나 개의 프로세스 나에게 발생하지 않았다 오프셋 - 나는 손잡이도 공유 메모리에 명명 된 할당에 갈 수있는 것 같아요. –