Partager via


Étendue de la mémoire allouée

Toute la mémoire allouée par un processus à l’aide des fonctions d’allocation de mémoire (HeapAlloc, VirtualAlloc, GlobalAllocou LocalAlloc) est accessible uniquement au processus. Toutefois, la mémoire allouée par une DLL est allouée dans l’espace d’adressage du processus qui a appelé la DLL et n’est pas accessible à d’autres processus utilisant la même DLL. Pour créer de la mémoire partagée, vous devez utiliser le mappage de fichiers.

Le mappage de fichiers nommés permet de créer facilement un bloc de mémoire partagée. Un processus peut spécifier un nom lorsqu’il utilise la fonction CreateFileMapping pour créer un objet de mappage de fichiers. D’autres processus peuvent spécifier le même nom que la fonction CreateFileMapping ou fonction OpenFileMapping pour obtenir un handle à l’objet de mappage.

Chaque processus spécifie son handle à l’objet de mappage de fichiers dans la fonction MapViewOfFile pour mapper une vue du fichier dans son propre espace d’adressage. Les vues de tous les processus d’un objet de mappage de fichiers unique sont mappées dans les mêmes pages partageables de stockage physique. Toutefois, les adresses virtuelles des vues mappées peuvent varier d’un processus à un autre, sauf si la fonction MapViewOfFileEx est utilisée pour mapper la vue à une adresse spécifiée. Bien qu’il soit partagé, les pages de stockage physique utilisées pour une vue de fichier mappée ne sont pas globales ; ils ne sont pas accessibles aux processus qui n’ont pas mappé une vue du fichier.

Toutes les pages validées par le mappage d’une vue d’un fichier sont publiées lorsque le dernier processus avec une vue de l’objet de mappage se termine ou annule son affichage en appelant la fonction UnmapViewOfFile. À ce stade, le fichier spécifié (le cas échéant) associé à l’objet de mappage est mis à jour. Un fichier spécifié peut également être forcé de mettre à jour en appelant la fonction FlushViewOfFile.

Pour plus d’informations, consultez mappage de fichiers . Pour obtenir un exemple de mémoire partagée dans une DLL, consultez Utilisation de la mémoire partagée dans une bibliothèque Dynamic-Link.

Si plusieurs processus ont un accès en écriture à la mémoire partagée, vous devez synchroniser l’accès à la mémoire. Pour plus d’informations, consultez de synchronisation .