Portée 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 aux autres processus à l’aide de la même DLL. Pour créer de la mémoire partagée, vous devez utiliser le mappage de fichiers.

Le mappage de fichier nommé offre un moyen simple de créer 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 pour la fonction CreateFileMapping ou OpenFileMapping pour obtenir un descripteur de l’objet de mappage.

Chaque processus spécifie son descripteur de 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 pour un objet de mappage de fichier 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’elles soient 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 libérées lorsque le dernier processus avec une vue de l’objet de mappage se termine ou annule la mise en correspondance de sa vue 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é à être mis à 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 de Dynamic-Link.

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