我试图将一些共享内存代码从CENTOS(3.5)迁移到CYGWIN(2.8.1,win10)。 共享内存通常是这样的:
通过shmget在进程中生成共享内存。
通过shmat在此过程中映射共享内存并记录位置,然后将一些信息填入内存。
通过“shmat”将共享内存映射到另一个进程,传递记录的最后一个进程的位置,因为我们希望两个进程都将共享内存映射到同一地址。
以下是一些解释的代码:
// one process
size_t size = 1024 * 1024;//1M
int id = shmget(IPC_PRIVATE, size, 0660);
char *madr = 0;
char *location = shmat(id, madr, 0);
// another process
char *location1 = shmat(id, location , 0);
// !!!we hope location1 and location should be the same!!!
On Centos它运作良好。
在Cygwin上,一个进程将共享内存映射到0xffd90000,另一个进程与它不同但映射到oxffdb0000。我们检查该进程的内存0xffd90000是否可用。
答案 0 :(得分:0)
对Linux也有错误的期望,见
https://linux.die.net/man/2/shmat
请注意以这种方式附加的共享内存段可能是 附加在不同进程的不同地址。所以,任何 必须使共享内存中维护的指针成为相对的 (通常是段的起始地址),而不是 绝对的。