J'aimerais partager une variable statique/globale uniquement entre un processus et une dll qui est invoquée par le processus. L'exe et la dll sont dans le même espace d'adressage mémoire. Je ne veux pas que la variable soit partagée entre d'autres processus.
Élaboration du problème :
Disons qu'il existe une variable statique/globale x
en a.cpp
. Les deux exe foo.exe
et la dll bar.dll
ont a.cpp
donc la variable x
est dans les deux images.
Ahora, foo.exe
charge dynamiquement (ou statiquement) bar.dll
. Le problème est alors de savoir si la variable x
est partagé par l'exe et la dll, ou non.
Dans Windows, ces deux gars jamais partager le x
: l'exe et la dll auront une copie séparée de x
. Cependant, sous Linux, l'exe et la dll partagent la variable x
.
Malheureusement, je veux le comportement de Linux. J'ai d'abord envisagé d'utiliser pragma data_seg
sur Windows. Cependant, même si je configure correctement le segment de données partagé, foo.exe
y 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
entonces x
est partagé. Mais, je ne veux pas x
pour être partagé par différents processus. Ainsi, en utilisant data_seg
a échoué.
Je peux utiliser un fichier mappé en mémoire en créant un nom unique entre exe et dll, ce que j'essaie maintenant.
Deux questions :
- Pourquoi le comportement de Linux et de Windows est-il différent ? Quelqu'un peut-il nous en dire plus à ce sujet ?
- Quel serait le moyen le plus simple de résoudre ce problème sous Windows ?