Heim >Backend-Entwicklung >C++ >Wie verhalten sich globale und statische Variablen in dynamisch verknüpften gemeinsam genutzten Bibliotheken über verschiedene Betriebssysteme hinweg?

Wie verhalten sich globale und statische Variablen in dynamisch verknüpften gemeinsam genutzten Bibliotheken über verschiedene Betriebssysteme hinweg?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-12-11 05:45:14855Durchsuche

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

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:

  • Externe globale Variablen sind außerhalb des definierenden Moduls nicht sichtbar.
  • Um eine globale Variable zu exportieren, muss sie mit __declspec(dllexport) in der DLL und __declspec(dllimport) im Import deklariert werden Modul.

Unix-ähnliche Systeme:

  • Externe globale Variablen sind sichtbar und werden von allen Modulen gemeinsam genutzt, die während der dynamischen Verknüpfung zur Ladezeit geladen werden.

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn