已配置的記憶體範圍
進程使用記憶體配置函式配置的所有記憶體(HeapAlloc、VirtualAlloc、GlobalAlloc或 LocalAlloc) 只能存取進程。 不過,DLL 所配置的記憶體會配置於呼叫 DLL 的進程地址空間中,而且無法使用相同 DLL 存取其他進程。 若要建立共用記憶體,您必須使用檔案對應。
具名檔案對應可讓您輕鬆建立共用記憶體區塊。 進程可以使用 createFileMapping 函式來建立檔案對應物件時,指定名稱。 其他進程可以將相同的名稱指定給 CreateFileMapping 或 OpenFileMapping 函式,以取得對應物件的句柄。
每個進程都會指定其 MapViewOfFile 函式中檔案對應物件的句柄,以將檔案的檢視對應至自己的地址空間。 單一檔案對應物件之所有進程的檢視都會對應到實體記憶體的相同可共用頁面。 不過,除非使用 mapViewOfFileEx函式來對應檢視的,否則對應檢視的虛擬位址可能會因進程而異。 雖然可共用,但用於對應檔案檢視的實體記憶體頁面並非全域;無法存取尚未對應檔案檢視的進程。
對應檔案檢視所認可的任何頁面,都會在對應物件檢視的最後一個進程終止或取消對應其檢視時,呼叫 UnmapViewOfFile 函式來取消對應其檢視。 此時,已更新與對應對象相關聯的指定檔案(如果有的話)。 您也可以呼叫 FlushViewOfFile 函式,強制更新指定的檔案。
如需詳細資訊,請參閱 檔案對應。 如需 DLL 中共用記憶體的範例,請參閱在 Dynamic-Link Library 中使用共用記憶體。
如果多個進程具有共用記憶體的寫入許可權,您必須同步處理記憶體的存取權。 如需詳細資訊,請參閱 同步處理。