【发布时间】:2011-11-29 16:44:58
【问题描述】:
我使用shmget分配了一块共享内存。
然后我使用shmat分别将共享内存附加到进程A和进程B。我假设shmat 返回的 A 和 B 的句柄(即 A 和 B 中映射到实际共享内存的地址)是不同的。
假设 A 和 B 的句柄分别定义为 char* p 和 char* q。
我的问题是,如果我们将一个对象写入进程 A 中的地址 p + sizeof(anotherObject),我们能否期望在进程 B 中的地址 q + sizeof(anotherObject) 处获得相同的对象?
我猜是这样,但不是 100% 确定。如果是这样,既然我们知道p + sizeof(anotherObject) 和q + sizeof(anotherObject) 指的是不同的内存位置,那么这种通信或映射机制是如何实现的?
【问题讨论】:
-
考虑使用 Boost.Interprocess - 有一个文档可以回答像你这样的问题。
-
考虑使用现代接口
shm_open和mmap来完成这样的任务。它们限制较少,更容易处理。
标签: c++ c memory-management ipc