作者ireullin (raison detre)
看板C_and_CPP
標題[問題] Share memory一問
時間Fri Oct 28 16:33:44 2011
以下是我的程式碼
key_t _key = 889;
int _size = 32;
int _id1 = shmget(_key, _size, 0777 | IPC_CREAT);
void* _addr1 = shmat(_id1, 0, 0);
int _id2 = shmget(_key, _size, 0777 | IPC_CREAT);
void* _addr2 = shmat(_id2, 0, 0);
std::cout << (int)_addr1 << std::endl;
std::cout << (int)_addr2 << std::endl;
得到結果是
805306368
1073741824
請問一下各位
照理說相同的key值所取到的記憶體位址應該是要相同的才是
否則要怎麼分享記憶體的內容呢
那如果我把程式改為
key_t _key = 889;
int _size = 32;
int _id1 = shmget(_key, _size, 0777 | IPC_CREAT);
void* _addr1 = shmat(_id1, 0, 0);
void* _addr2 = shmat(_id1, 0, 0);
std::cout << (int)_addr1 << std::endl;
std::cout << (int)_addr2 << std::endl;
得到的結果依然是
805306368
1073741824
請問如果相同一個id執行了兩次的shmat的話
會發生甚麼狀況呢
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 61.220.71.34
推 littleshan:去重讀一次OS virtual memory那一章 10/28 16:41
→ littleshan:透過virtual memory可以讓兩支不同process中的不同位址 10/28 16:42
→ littleshan:對應到同一塊 physical memory 上 10/28 16:42
推 littleshan:推文太快沒注意到是同一支process,不過後半句依然不變 10/28 16:52