boost::interprocess - mengalokasikan_aligned di memori bersama?

Jika saya menggunakan allocate_aligned untuk mengalokasikan blok memori yang selaras dalam sebagian memori bersama, lalu bagaimana cara mengidentifikasi blok yang sama di proses lain? Misalnya.

managed_shared_memory managed_shm(open_or_create, "SharedMemory", 65536);
void *ptr = managed_shm.allocate_aligned(256, 16);

Lalu bagaimana cara menemukan ptr dari dalam proses lain?

Untuk alokasi yang tidak selaras saya hanya menggunakan find_or_construct dan jelas ada nama yang terkait dengan alokasi tersebut yang memungkinkan untuk menemukan alokasi dari proses lain. Namun sepertinya tidak ada cara untuk melakukan alokasi yang selaras dengan find_or_construct dan ternyata saya kehilangan beberapa poin mendasar tentang cara mengidentifikasi alokasi anonim.


person Paul R    schedule 16.11.2012    source sumber


Jawaban (1)


Contoh dari dokumen disertakan di bawah ini. Ini berlaku untuk pointer ke metode alokasi_aligned yang dikembalikan memori serta metode alokasi 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)
person Josh Heitzman    schedule 16.11.2012
comment
Ah terima kasih - gagasan untuk mengirimkan offset dari satu proses ke proses lainnya tidak terpikir oleh saya - saya kira pegangannya bahkan bisa masuk dalam alokasi bernama di memori bersama. - person Paul R; 16.11.2012