Variables globales et statiques liées dynamiquement dans les bibliothèques partagées
Liaison dynamique au temps de chargement
Lorsqu'une application se lie dynamiquement à un module A avec une liaison au moment du chargement, le système d'exploitation charge le code et les données de la DLL. dans l'espace d'adressage de l'application. L'application possède sa propre copie des variables globales et statiques de A, chargées dans son segment de données.
Lien dynamique d'exécution
Avec la liaison dynamique d'exécution, l'application L'application charge le code et les données de la DLL uniquement en cas de besoin. L'application ne reçoit pas ses propres copies des variables globales et statiques de A. Au lieu de cela, il y accède directement à partir de la DLL chargée.
Visibilité et portée
Dans tous les cas, les variables statiques ne sont visibles que dans le module où elles sont définies. Les variables globales ont cependant des règles de visibilité différentes :
Windows :
Systèmes de type Unix :
Applications multiples
Si plusieurs applications utilisent les modules A et B, des copies distinctes de leurs variables globales et statiques sont créées pour chaque application, même si elles se trouvent dans des processus différents.
Accès des DLL aux applications globales
Les DLL ne le font pas ont un accès direct aux variables globales de l’application à laquelle ils sont liés. Afin de manipuler les variables globales de l'application, la DLL doit utiliser les fonctions exportées fournies par l'application.
Conclusion
Le comportement des variables globales et statiques dans les fichiers partagés liés dynamiquement les bibliothèques varient entre les systèmes Windows et les systèmes de type Unix. Windows impose une séparation stricte des globaux entre les modules, tandis que les systèmes de type Unix permettent le partage des globaux pendant la liaison dynamique au moment du chargement. En général, il est recommandé d'éviter d'utiliser des variables globales lorsque vous travaillez avec des bibliothèques partagées.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!