【发布时间】:2013-03-19 23:27:42
【问题描述】:
我有两个进程,每个进程都可以从shmget()获取相同的shmid。
在这两个进程中,shmat()给出了不同的内存地址。
每个进程的地址总是相同的:
Process1: 0x41b31000
Process2: 0x4017d000
我不认为地址是虚拟地址,正如下面问题中写的答案,此外,如果这些地址是虚拟地址,它们必须指向相同的硬件地址。 但是,这些地址的内容并不相同。
我正在为 ARM 处理器进行交叉编译,我的程序在 x86 Debian Lenny 中运行时没有错误或问题。
我知道这个问题,但问题不是那么容易 - shmat() is returning a different "shmaddr" for same "shmkey" -
【问题讨论】:
-
是的,地址不同。有什么问题?
-
地址内容必须相同,但每次访问0x4017d000时,读取的内容不同。
-
也许您应该编辑问题以使其包含问题。就目前而言,其中没有任何有用的内容。
-
标题仍然具有误导性,手册页明确表示地址在不同进程中不同是可以的。无论如何,内存的内容应该是一样的。你能在一个独立的小例子中重现这个问题吗?
-
这些是虚拟地址。
标签: c linux memory arm shared-memory