[問題] Share memory一問

看板C_and_CPP (C/C++)作者 (raison detre)時間14年前 (2011/10/28 16:33), 編輯推噓2(202)
留言4則, 1人參與, 最新討論串1/1
以下是我的程式碼 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

10/28 16:41, , 1F
去重讀一次OS virtual memory那一章
10/28 16:41, 1F

10/28 16:42, , 2F
透過virtual memory可以讓兩支不同process中的不同位址
10/28 16:42, 2F

10/28 16:42, , 3F
對應到同一塊 physical memory 上
10/28 16:42, 3F

10/28 16:52, , 4F
推文太快沒注意到是同一支process,不過後半句依然不變
10/28 16:52, 4F
文章代碼(AID): #1EgcZgLZ (C_and_CPP)
文章代碼(AID): #1EgcZgLZ (C_and_CPP)