看板 C_and_CPP 關於我們 聯絡資訊
以下是我的程式碼 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