Heim >Backend-Entwicklung >C++ >Wie verhalten sich globale und statische Variablen in dynamisch verknüpften gemeinsam genutzten Bibliotheken über verschiedene Betriebssysteme hinweg?
Dynamisch verknüpfte globale und statische Variablen in gemeinsam genutzten Bibliotheken
Dynamische Verknüpfung zur Ladezeit
Wenn eine Anwendung mit Ladezeitverknüpfung dynamisch eine Verbindung zu einem Modul A herstellt, lädt das Betriebssystem den Code und die Daten der DLL in den Adressraum der Anwendung. Die Anwendung verfügt über eine eigene Kopie der globalen und statischen Variablen von A, die in ihr Datensegment geladen wird.
Dynamische Laufzeitverknüpfung
Mit der dynamischen Laufzeitverknüpfung wird die Die Anwendung lädt den Code und die Daten der DLL nur bei Bedarf. Die Anwendung erhält keine eigenen Kopien der globalen und statischen Variablen von A. Stattdessen greift es direkt über die geladene DLL auf sie zu.
Sichtbarkeit und Geltungsbereich
Statische Variablen sind in allen Fällen nur innerhalb des Moduls sichtbar, in dem sie definiert sind. Für globale Variablen gelten jedoch andere Sichtbarkeitsregeln:
Windows:
Unix-ähnliche Systeme:
Mehrere Anwendungen
Wenn mehrere Anwendungen die Module A und verwenden B, für jede Anwendung werden separate Kopien ihrer globalen und statischen Variablen erstellt, auch wenn sie sich in unterschiedlichen Prozessen befinden.
DLL-Zugriff auf Anwendungsglobale
DLLs tun dies nicht haben direkten Zugriff auf die globalen Variablen der Anwendung, mit der sie verknüpft sind. Um die globalen Variablen der Anwendung zu manipulieren, muss die DLL von der Anwendung bereitgestellte exportierte Funktionen verwenden.
Fazit
Das Verhalten globaler und statischer Variablen in dynamisch verknüpften Shareds Die Anzahl der Bibliotheken variiert zwischen Windows- und Unix-ähnlichen Systemen. Windows erzwingt eine strikte Trennung von Globals zwischen Modulen, während Unix-ähnliche Systeme die gemeinsame Nutzung von Globals während der dynamischen Verknüpfung zur Ladezeit ermöglichen. Im Allgemeinen wird empfohlen, bei der Arbeit mit gemeinsam genutzten Bibliotheken die Verwendung globaler Variablen zu vermeiden.
Das obige ist der detaillierte Inhalt vonWie verhalten sich globale und statische Variablen in dynamisch verknüpften gemeinsam genutzten Bibliotheken über verschiedene Betriebssysteme hinweg?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!