Bereich des zugeordneten Arbeitsspeichers
Der gesamte Arbeitsspeicher, den ein Prozess mithilfe der Speicherbelegungsfunktionen ( HeapAlloc, VirtualAlloc, GlobalAlloc oder LocalAlloc) zuordnet, ist nur für den Prozess zugänglich. Der von einer DLL zugeordnete Arbeitsspeicher wird jedoch im Adressraum des Prozesses zugeordnet, der die DLL aufgerufen hat, und ist für andere Prozesse, die dieselbe DLL verwenden, nicht zugänglich. Um freigegebenen Arbeitsspeicher zu erstellen, müssen Sie die Dateizuordnung verwenden.
Die Zuordnung benannter Dateien bietet eine einfache Möglichkeit, einen Block mit gemeinsam genutztem Arbeitsspeicher zu erstellen. Ein Prozess kann einen Namen angeben, wenn er die CreateFileMapping-Funktion verwendet, um ein Dateizuordnungsobjekt zu erstellen. Andere Prozesse können denselben Namen für die CreateFileMapping - oder OpenFileMapping-Funktion angeben, um ein Handle für das Zuordnungsobjekt abzurufen.
Jeder Prozess gibt sein Handle für das Dateizuordnungsobjekt in der MapViewOfFile-Funktion an, um eine Ansicht der Datei einem eigenen Adressraum zuzuordnen. Die Ansichten aller Prozesse für ein einzelnes Dateizuordnungsobjekt werden den gleichen teilbaren Seiten des physischen Speichers zugeordnet. Die virtuellen Adressen der zugeordneten Ansichten können jedoch von Prozess zu Prozess variieren, es sei denn, die MapViewOfFileEx-Funktion wird verwendet, um die Ansicht an einer angegebenen Adresse zuzuordnen. Die seiten des physischen Speichers, der für eine zugeordnete Dateiansicht verwendet wird, sind zwar teilbar, aber nicht global. Auf sie kann nicht für Prozesse zugegriffen werden, die keine Ansicht der Datei zugeordnet haben.
Alle Seiten, die durch Zuordnung einer Ansicht einer Datei committet werden, werden freigegeben, wenn der letzte Prozess mit einer Ansicht des Zuordnungsobjekts entweder beendet oder die Zuordnung der Ansicht durch Aufrufen der UnmapViewOfFile-Funktion aufgehoben wird. Zu diesem Zeitpunkt wird die angegebene Datei (sofern vorhanden) aktualisiert, die dem Zuordnungsobjekt zugeordnet ist. Die Aktualisierung einer angegebenen Datei kann auch erzwungen werden, indem die FlushViewOfFile-Funktion aufgerufen wird.
Weitere Informationen finden Sie unter Dateizuordnung. Ein Beispiel für gemeinsam genutzten Arbeitsspeicher in einer DLL finden Sie unter Verwenden von freigegebenem Arbeitsspeicher in einer Dynamic-Link Bibliothek.
Wenn mehrere Prozesse Über Schreibzugriff auf gemeinsam genutzten Arbeitsspeicher verfügen, müssen Sie den Zugriff auf den Arbeitsspeicher synchronisieren. Weitere Informationen finden Sie unter Synchronisierung.