Maison > développement back-end > C++ > Comment les variables globales et statiques se comportent-elles dans les bibliothèques partagées liées dynamiquement sur différents systèmes d'exploitation ?

Comment les variables globales et statiques se comportent-elles dans les bibliothèques partagées liées dynamiquement sur différents systèmes d'exploitation ?

Mary-Kate Olsen
Libérer: 2024-12-11 05:45:14
original
890 Les gens l'ont consulté

How Do Global and Static Variables Behave in Dynamically Linked Shared Libraries Across Different Operating Systems?

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 :

  • Les variables globales externes ne sont pas visibles en dehors du module de définition.
  • Pour exporter une variable globale, elle doit être déclarée avec __declspec(dllexport) dans la DLL et __declspec(dllimport) dans le fichier d'import. module.

Systèmes de type Unix :

  • Les variables globales externes sont visibles et partagées entre tous les modules chargés pendant la liaison dynamique au moment du chargement.

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal