Fermeture d’un objet de mappage de fichiers

Lorsqu’un processus a terminé avec l’objet de mappage de fichiers, il doit détruire toutes les vues de fichiers dans son espace d’adressage à l’aide de la fonction UnmapViewOfFile pour chaque vue de fichier.

Le démappage d’une vue mappée d’un fichier invalide la plage occupée par la vue dans l’espace d’adressage du processus et rend la plage disponible pour d’autres allocations. Il supprime l’entrée de jeu de travail pour chaque page virtuelle non mappée qui faisait partie du jeu de travail du processus et réduit la taille du jeu de travail du processus. Il décrémente également le nombre de partages de la page physique correspondante.

Les pages modifiées dans l’affichage non mappé ne sont pas écrites sur le disque tant que leur nombre de partages n’a pas atteint zéro, ou, en d’autres termes, tant qu’elles ne sont pas mappées ou supprimées des jeux de travail de tous les processus qui partagent les pages. Même alors, les pages modifiées sont écrites « paresseusement » sur le disque ; autrement dit, les modifications peuvent être mises en cache en mémoire et écrites sur le disque ultérieurement. Pour réduire le risque de perte de données en cas de panne d’alimentation ou de plantage du système, les applications doivent vider explicitement les pages modifiées à l’aide de la fonction FlushViewOfFile .

Lorsque chaque processus se termine à l’aide de l’objet de mappage de fichiers et qu’il a démaché toutes les vues, il doit fermer le handle de l’objet de mappage de fichiers et le fichier sur le disque en appelant CloseHandle. Ces appels à CloseHandle réussissent même s’il existe des affichages de fichiers qui sont toujours ouverts. Toutefois, le fait de laisser des vues de fichiers mappées entraîne des fuites de mémoire.