我一直在閱讀有關memory mapped files,它允許跨多個進程共享文件。內存映射文件被裝入用戶態地址空間或進程內核地址空間?
每個進程(32位是特異性的)具有專用地址空間4GB其通過Eric Lippert分爲2GB的用戶模式地址空間和2GB保留用於內核如上所述here。用戶模式地址空間對每個進程是私有的,不能被其他進程修改。
那麼,這是否意味着MMF被映射到內核模式地址空間,因爲它在所有進程之間共享?
我已經搜索了很多關於MMF的地方,但它找不到任何資源說明。所以,在這裏發佈問題,如果我的假設是正確的,或者我在這裏錯過了什麼?任何資源到MSDN也會很好。
這是比這更復雜一些。其他進程不能直接訪問地址空間的任何部分。然而,你可以明確地將你的地址空間的一部分與其他進程共享,並且給予正確的進程權限,一個外部進程*可以*訪問你的進程的內存(這基本上就是調試器所做的)例如 – jalf
@jalf - 私人我的意思是,一個地址空間的用戶模式不能被其他進程寫入。 –
當進程寫入指針時,這是一個虛擬指針。操作系統決定它寫入的實際內存。如果您已經指示操作系統兩個不同進程中的兩個不同虛擬指針發生映射到同一個後備存儲,則一個進程可以寫入內存,而另一個進程可以看到該更改。 –