2015-11-02 107 views
0

分配的內存在哪裏?新的內存在哪個地址空間中?如何在Windows中實現共享內存?

+0

沒有特別的,以及所有這些;操作系統可以將相同部分的物理內存映射到每個共享進程。 – molbdnilo

+0

@david是你提到的那個 – q126y

+0

@david我想知道一般大綱,而不是實際的細節。 – q126y

回答

1

Windows中有兩種常見的共享內存類型。

一個是當多個進程將同一個文件映射到內存中時。這顯然發生在可執行文件和庫中,但它也可能發生在數據文件中。基本上,進程共享這個內存的事實對它的工作方式幾乎沒有影響。它是通過與單個進程映射的相同請求分頁來實現的。

另一種類型是共享的匿名映射。可以通過調用CreateFileMapping函數創建這些函數,而無需指定要映射的有效文件。這與分配內存的行爲相同,只是有多個進程可以訪問它。就像正常的內存使用情況一樣,如果它沒有被訪問,或者爲了某種其他目的需要RAM,它可以被分頁到磁盤。

對於共享匿名映射,內核爲進程提供內存句柄,以便進程在想要將其映射到其內存空間時可以引用它。