我想在兩個進程之間共享內存。
mmap()
之後,我得到一個地址mapStart
,然後我給mapStart
加上偏移量並得到mapAddr
,並確保mapAddr
不會超過maped PAGE_SIZE。
當我寫mapAddr
由mmap()之後,寫入返回的地址是可以的,但讀取會導致系統崩潰。爲什麼?
memcpy((void *)mapAddr, data, size);
一切正常。
但是當我通過
memcpy(&data, (void *)mapAddr, size);`
即會情況下系統崩潰從mapAddr
讀取。
誰知道爲什麼? The similar problem is here
添加一些信息: @Tony德爾羅伊,@ J-16 SDiZ
MMAP功能是:
mapStart = (void volatile *)mmap(0, PAGE_SIZE, PROT_READ | PROT_WRITE, MAP_SHARED | MAP_LOCKED, memfd, pa_base);
系統崩潰:沒有任何操作系統錯誤消息,控制檯打印一些MCA
信息
詳細描述在here
這是一個瘋狂的想法 - 爲什麼不顯示代碼爲'mmap()'準備參數?很可能保護標誌缺少'PROT_READ',但我們怎麼說呢? –
什麼樣的「系統崩潰」? sigfault?內核恐慌?給出錯誤消息。 –
你在其他帖子中提到過IA64,這是否是同一個拱? –