Le partage global/variable statique entre un processus et DLL

J'aimerais partager statique/variable globale qu'entre un processus et un dll qui est invoquée par le processus. Les exe et dll sont dans le même espace d'adressage mémoire. Je ne veux pas la variable à être partagée par les autres processus.


Élaboration du problème:

Dire qu'il y a un statique/variable globale x dans a.cpp. L'exe foo.exe et la dll bar.dll ont a.cpp, de sorte que la variable x est dans les deux images.

Maintenant, foo.exe charge dynamiquement (ou statique) bar.dll. Ensuite, le problème est de savoir si la variable x est partagée par les exe et dll, ou pas.

Dans Windows, ces deux gars jamais partager la x: les exe et dll disposerez d'une copie de x. Cependant, dans Linux, le fichier exe et dll de faire partager la variable x.

Malheureusement, je veux le comportement de Linux. J'ai d'abord considéré l'utilisation de pragma data_seg sur Windows. Cependant, même si j'ai correctement le programme d'installation le segment de données partagées, foo.exe et bar.dll ne partage jamais le x. Rappelons que bar.dll est chargé dans l'espace d'adressage de foo.exe. Cependant, si je lance une autre instance de foo.exe, puis x est partagé. Mais, je ne veux pas x d'être partagé par les différents processus. Ainsi, l'utilisation de data_seg a échoué.

J'ai peut-il utiliser un fichier mappé en mémoire par un nom unique entre exe et dll, je vais essayer maintenant.


Deux questions:

  1. Pourquoi le comportement de Linux et de Windows est-elle différente? Quelqu'un peut-il expliquer cela plus en détail?
  2. Ce qui serait le plus facile à résoudre ce problème sur Windows?
InformationsquelleAutor minjang | 2011-02-06