共享内存地址

时间:2017-01-07 09:41:31

标签: c linux shared-memory

我在Linux上使用C,并分配2个共享内存段。

第一个段是在主程序中创建的,然后我调用一个子进程并创建第二个段。

在子流程中,我将第二段的地址放在第一段中留出的指针中。

在返回主程序时,当我附加到第二个段并比较指针(从shmat返回的指针和先前由子进程存储的指针)时,我发现它们是不同的。

这是预期的吗?

谢谢,Mark。

1 个答案:

答案 0 :(得分:2)

是的,这是预料之中的。映射到两个进程的虚拟空间中的公共地址将是非常有限的限制。其中,内存管理器必须同时知道哪些进程愿意映射,以便找到一个共同的空闲区域。这会破坏虚拟内存的原则(每个进程看到一个空白的地址空间),并导致配置无法仲裁。

在公共地址共享确实是可能的,但只有在映射到地址空间的某个保留部分时才有意义,这样它就不会映射到其他地方。