Liberando memória virtual

A função VirtualFree descompromissa e libera páginas de acordo com as seguintes regras:

  • Descompromissa uma ou mais páginas confirmadas, alterando o estado das páginas para reservado. A descompactação de páginas libera o armazenamento físico associado às páginas, tornando-o disponível para ser alocado por qualquer processo. Qualquer bloco de páginas confirmadas pode ser descompactado.
  • Libera um bloco de uma ou mais páginas reservadas, alterando o estado das páginas para gratuito. A liberação de um bloco de páginas disponibiliza o intervalo de endereços reservados a serem alocados pelo processo. As páginas reservadas só podem ser liberadas liberando todo o bloco que foi inicialmente reservado por VirtualAlloc.
  • Descompromissa e libera um bloco de uma ou mais páginas confirmadas simultaneamente, alterando o estado das páginas para gratuito. O bloco especificado deve incluir todo o bloco inicialmente reservado por VirtualAlloc e todas as páginas devem ser confirmadas no momento.

Depois que um bloco de memória for liberado ou descompactado, você nunca mais poderá se referir a ele. Qualquer informação que possa estar nessa memória se foi para sempre. Tentar ler ou gravar em uma página gratuita resulta em uma exceção de violação de acesso. Se você precisar de informações, não descompromisse ou libere a memória que contém essas informações.

Para especificar que os dados em um intervalo de memória não são mais de interesse, chame VirtualAlloc com MEM_RESET. As páginas não serão lidas ou gravadas no arquivo de paginação. No entanto, o bloco de memória pode ser usado novamente mais tarde.