共享内存地址

Shared memory addresses

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

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

在子进程中,我将第二个段的地址放在我在第一个段中预留的指针中。

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

这是预期的吗?

谢谢,马克。

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

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