2014-04-29 40 views
0

有沒有辦法使用一個共享內存的方式,兩個變量共享內存

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 ?? 

非常感謝!

回答

0

顯然(閱讀說明書)shmat讓你在這裏得到一塊內存,大小爲2*sizeof(int)

如果是這樣,那麼你可以調整指針:

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

而且,這裏鑄造是錯誤的,for reasons listed here(而問題是關於malloc,同樣的論點也適用)

+0

OK,那工程.. :)謝謝! – JiZzuS

+0

哦..有人在學校教我們使用malloc鑄造..不記得爲什麼..:D謝謝:) – JiZzuS

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; 
+0

謝謝.. :)正是我需要的。 – JiZzuS