Zakres przydzielonej pamięci
Cała pamięć przydzielana przez proces przy użyciu funkcji alokacji pamięci ( HeapAlloc, VirtualAlloc, GlobalAlloclub LocalAlloc) jest dostępna tylko dla tego procesu. Jednak pamięć przydzielona przez bibliotekę DLL jest przydzielana w przestrzeni adresowej procesu, który nazwał bibliotekę DLL i nie jest dostępna dla innych procesów przy użyciu tej samej biblioteki DLL. Aby utworzyć pamięć udostępnioną, należy użyć mapowania plików.
Mapowanie nazwanych plików umożliwia łatwe tworzenie bloku pamięci udostępnionej. Proces może określić nazwę, gdy używa funkcji CreateFileMapping w celu utworzenia obiektu mapowania plików. Inne procesy mogą określać tę samą nazwę na CreateFileMapping lub funkcji OpenFileMapping w celu uzyskania uchwytu do obiektu mapowania.
Każdy proces określa jego uchwyt do obiektu mapowania plików w funkcji MapViewOfFile, aby zamapować widok pliku na własną przestrzeń adresową. Widoki wszystkich procesów dla pojedynczego obiektu mapowania plików są mapowane na te same strony z możliwością udostępniania magazynu fizycznego. Jednak wirtualne adresy mapowanych widoków mogą się różnić w zależności od jednego procesu do innego, chyba że funkcji MapViewOfFileEx jest używana do mapowania widoku pod określonym adresem. Mimo że jest dostępna, strony magazynu fizycznego używanego do zamapowanego widoku plików nie są globalne; nie są dostępne dla procesów, które nie zamapowały widoku pliku.
Wszystkie strony zatwierdzone przez mapowanie widoku pliku są zwalniane, gdy ostatni proces z widokiem obiektu mapowania kończy lub nie mapuje jego widoku, wywołując funkcję UnmapViewOfFile. W tej chwili jest aktualizowany określony plik (jeśli istnieje) skojarzony z obiektem mapowania. Można również wymusić aktualizację określonego pliku przez wywołanie funkcjiFlushViewOfFile.
Aby uzyskać więcej informacji, zobacz mapowanie plików. Przykład pamięci współużytkowanej w bibliotece DLL można znaleźć w temacie Using Shared Memory in a Dynamic-Link Library.
Jeśli wiele procesów ma dostęp do zapisu do pamięci udostępnionej, musisz zsynchronizować dostęp do pamięci. Aby uzyskać więcej informacji, zobacz Synchronization.