Share 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, GlobalAlloc ou 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 à la fonction CreateFileMapping ou 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 seul objet de mappage de fichiers 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 à l’autre, sauf si la fonction MapViewOfFileEx est utilisée pour mapper la vue à une adresse spécifiée. Bien que partageables, 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 mappage en appelant la fonction UnmapViewOfFile . À ce stade, le fichier spécifié (le cas échéant) associé à l’objet de mappage est mis à jour. Vous pouvez également forcer la mise à jour d’un fichier spécifié 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 Synchronisation.