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 และเห็นได้ชัดว่าฉันต้องขาดประเด็นพื้นฐานบางประการเกี่ยวกับวิธีการระบุการจัดสรรที่ไม่ระบุชื่อ


person Paul R    schedule 16.11.2012    source แหล่งที่มา


คำตอบ (1)


ตัวอย่างจากเอกสาร รวมอยู่ด้านล่าง สิ่งนี้ใช้ได้กับพอยน์เตอร์ไปยังหน่วยความจำที่ส่งคืนวิธีการจัดสรร_การจัดตำแหน่งเช่นเดียวกับวิธีการจัดสรรวานิลลา

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