Liberare memoria virtuale

La funzione VirtualFree decommette e rilascia le pagine in base alle regole seguenti:

  • Disattiva una o più pagine di cui è stato eseguito il commit, modificando lo stato delle pagine in modo che sia riservato. Il decommettimento delle pagine rilascia lo spazio di archiviazione fisico associato alle pagine, rendendolo disponibile per essere allocato da qualsiasi processo. Qualsiasi blocco di pagine di cui è stato eseguito il commit può essere decommesso.
  • Rilascia un blocco di una o più pagine riservate, modificando lo stato delle pagine in modo libero. Il rilascio di un blocco di pagine rende disponibile l'intervallo di indirizzi riservati da allocare dal processo. Le pagine riservate possono essere rilasciate solo liberando l'intero blocco inizialmente riservato da VirtualAlloc.
  • Scommette e rilascia contemporaneamente un blocco di una o più pagine di cui è stato eseguito il commit, modificando lo stato delle pagine in modo libero. Il blocco specificato deve includere l'intero blocco inizialmente riservato da VirtualAlloc e tutte le pagine devono essere attualmente sottoposte a commit.

Dopo il rilascio o il decommesso di un blocco di memoria, non è possibile farvi riferimento di nuovo. Tutte le informazioni che potrebbero essere state in quella memoria sono andate per sempre. Il tentativo di leggere o scrivere in una pagina libera genera un'eccezione di violazione di accesso. Se sono necessarie informazioni, non rimuovere o liberare memoria contenente tali informazioni.

Per specificare che i dati in un intervallo di memoria non sono più di interesse, chiamare VirtualAlloc con MEM_RESET. Le pagine non verranno lette o scritte nel file di paging. Tuttavia, il blocco di memoria può essere usato di nuovo in un secondo momento.