Compartilhar via


Fechando um objeto de mapeamento de arquivo

Quando um processo for concluído com o objeto de mapeamento de arquivo, ele deverá destruir todas as exibições de arquivo em seu espaço de endereço usando a função UnmapViewOfFile para cada exibição de arquivo.

Desmarcando uma exibição mapeada de um arquivo invalida o intervalo ocupado pela exibição no espaço de endereço do processo e disponibiliza o intervalo para outras alocações. Ele remove a entrada do conjunto de trabalho para cada página virtual não mapeada que fazia parte do conjunto de trabalho do processo e reduz o tamanho do conjunto de trabalho do processo. Ele também diminui a contagem de compartilhamento da página física correspondente.

As páginas modificadas na exibição não mapeada não são gravadas no disco até que a contagem de compartilhamentos atinja zero ou, em outras palavras, até que elas sejam não mapeadas ou cortadas dos conjuntos de trabalho de todos os processos que compartilham as páginas. Mesmo assim, as páginas modificadas são gravadas "preguiçosamente" no disco; ou seja, as modificações podem ser armazenadas em cache na memória e gravadas em disco posteriormente. Para minimizar o risco de perda de dados em caso de falha de energia ou falha do sistema, os aplicativos devem liberar explicitamente páginas modificadas usando a função FlushViewOfFile .

Quando cada processo terminar de usar o objeto de mapeamento de arquivo e tiver não mapeado todas as exibições, ele deverá fechar o identificador do objeto de mapeamento de arquivo e o arquivo no disco chamando CloseHandle. Essas chamadas para CloseHandle têm êxito mesmo quando há exibições de arquivo que ainda estão abertas. No entanto, deixar as exibições de arquivo mapeadas causa perda de memória.