Freigeben von virtuellem Arbeitsspeicher
Die VirtualFree-Funktion dekommitiert seiten gemäß den folgenden Regeln und gibt diese frei:
- Dekommitiert eine oder mehrere Seiten, für die ein Commit ausgeführt wurde, und ändert den Zustand der Seiten in reserviert. Durch das Decommiting von Seiten wird der physische Speicher, der den Seiten zugeordnet ist, frei, sodass er von jedem Prozess zugeordnet werden kann. Für jeden Block von Seiten, für die ein Commit ausgeführt wurde, kann der Commit aufgehoben werden.
- Gibt einen Block von einer oder mehreren reservierten Seiten frei und ändert den Zustand der Seiten in "Free". Durch das Freigeben eines Seitenblocks wird der Bereich der reservierten Adressen verfügbar, der vom Prozess zugeordnet werden soll. Reservierte Seiten können nur freigegeben werden, indem der gesamte Block freigegeben wird, der ursprünglich von VirtualAllocreserviert wurde.
- Dekommitiert einen Block von einer oder mehreren Seiten, für die ein Commit ausgeführt wurde, und gibt diesen gleichzeitig frei, und ändert den Zustand der Seiten in "Free". Der angegebene Block muss den gesamten Block enthalten, der ursprünglich von VirtualAllocreserviert wurde, und für alle Seiten muss derzeit ein Commit ausgeführt werden.
Nachdem ein Speicherblock freigegeben oder die Freigabe aufgehoben wurde, können Sie nie wieder darauf verweisen. Alle Informationen, die sich möglicherweise in diesem Speicher befinden, sind für immer nicht mehr vorhanden. Der Versuch, aus einer kostenlosen Seite zu lesen oder auf eine kostenlose Seite zu schreiben, führt zu einer Zugriffsverletzungsausnahme. Wenn Sie Informationen benötigen, sollten Sie den Arbeitsspeicher, der diese Informationen enthält, nicht freigeben oder freigeben.
Um anzugeben, dass die Daten in einem Speicherbereich nicht mehr von Interesse sind, rufen Sie VirtualAlloc mit MEM RESET _ auf. Die Seiten werden nicht aus der Auslagerungsdatei gelesen oder in diese geschrieben. Der Speicherblock kann jedoch später wieder verwendet werden.