一个共享内存中的两个变量

时间:2014-04-29 12:08:18

标签: c block shared-memory var

有没有办法使用一个共享内存,

shmid = shmget (shmkey, 2*sizeof(int), 0644 | IPC_CREAT);

对于两个具有不同值的变量?

int *a, *b;
a = (int *) shmat (shmid, NULL, 0);
b = (int *) shmat (shmid, NULL, 0); // use the same block of shared memory ??

非常感谢!

2 个答案:

答案 0 :(得分:0)

显然(阅读手册)shmat会在这里找到一块大小为2*sizeof(int)的单块内存。

如果是这样,那么你可以调整指针:

int *a, *b;
a = shmat(shmid, NULL, 0);
b = a+1;

此外,在这里投射是错误的,for reasons listed here(问题是关于malloc,同样的论点适用)

答案 1 :(得分:0)

我不熟悉shmget和类似的东西,但我想如果内存是连续的,只需增加指针。

int *a, *b;
i = (int *) shmat (shmid, NULL, 0);
a = ((int *) shmat (shmid, NULL, 0)) + 1;

更好的是,只需写下:

int *myMemory = shmat (shmid, NULL, 0);

myMemory[0] = 5;
myMemory[1] = 10;