有沒有辦法使用一個共享內存的方式,兩個變量共享內存
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 ??
非常感謝!
有沒有辦法使用一個共享內存的方式,兩個變量共享內存
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 ??
非常感謝!
顯然(閱讀說明書)shmat
讓你在這裏得到一塊內存,大小爲2*sizeof(int)
。
如果是這樣,那麼你可以調整指針:
int *a, *b;
a = shmat(shmid, NULL, 0);
b = a+1;
而且,這裏鑄造是錯誤的,for reasons listed here(而問題是關於malloc
,同樣的論點也適用)
我不熟悉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;
謝謝.. :)正是我需要的。 – JiZzuS
OK,那工程.. :)謝謝! – JiZzuS
哦..有人在學校教我們使用malloc鑄造..不記得爲什麼..:D謝謝:) – JiZzuS