L'approche recommandée consiste à créer un mappage de mémoire nommé (CreateFileMapping
, probablement avec INVALID_HANDLE_VALUE
comme premier paramètre car vous n'avez pas besoin d'un fichier réel) et à mettre vos données partagées dans le mappage. Vous aurez également besoin d'un mutex nommé pour synchroniser l'accès à ces données.
Une approche paresseuse consiste à utiliser #pragma data_seg
(pour MSVC, d'autres compilateurs ont des outils similaires) pour mettre vos données dans une section partagée. Veuillez noter que MSVC nécessite que les données soient explicitement initialisées; sinon, il ira à la section des données régulières sans même un avertissement.
L'inconvénient de la seconde approche est que la sécurité n'est pas appliquée ici, de sorte que tout utilisateur (même entre sessions) aura accès à la section partagée. Un autre problème est que seules les instances du même fichier exécutable (ou DLL) partageront la section; c'est-à-dire que si vous copiez un fichier .exe et que vous l'exécutez à partir de deux emplacements différents, les données ne seront pas partagées.
Encore une autre ligne ridiculement longue. S'il vous plaît, gardez le sujet court et posez la question dans le * corps *! – JesperE