Was passiert mit globalen und statischen Variablen in einer gemeinsam genutzten Bibliothek, wenn diese dynamisch verknüpft wird?

Ich versuche zu verstehen, was passiert, wenn Module mit globalen und statischen Variablen dynamisch mit einer Anwendung verknüpft werden. Mit Modulen meine ich jedes Projekt in einer Lösung (ich arbeite viel mit Visual Studio!). Diese Module sind entweder in die * .lib- oder * .dll-Datei oder in die * .exe-Datei selbst integriert.

Ich verstehe, dass die Binärdatei einer Anwendung globale und statische Daten aller einzelnen Übersetzungseinheiten (Objektdateien) im Datensegment enthält (und schreibgeschütztes Datensegment, wenn const).

Was passiert, wenn diese Anwendung ein Modul A mit dynamischer Ladezeitverknüpfung verwendet? Ich gehe davon aus, dass die DLL einen Abschnitt für ihre globalen und statischen Werte hat. Lädt das Betriebssystem sie? Wenn ja, wohin werden sie geladen?

Und was passiert, wenn die Anwendung ein Modul B mit dynamischer Laufzeitverknüpfung verwendet?

Wenn meine Anwendung zwei Module enthält, die A und B verwenden, werden dann Kopien der globalen Elemente von A und B wie unten beschrieben erstellt (sofern es sich um unterschiedliche Prozesse handelt)?

Erhalten die DLLs A und B Zugriff auf die globalen Anwendungen?

(Bitte geben Sie auch Ihre Gründe an)

Zitat ausMSDN:

Variablen, die in einer DLL-Quellcodedatei als global deklariert sind, werden vom Compiler und Linker als globale Variablen behandelt. Jeder Prozess, der eine bestimmte DLL lädt, erhält jedoch eine eigene Kopie der globalen Variablen dieser DLL. Der Umfang der statischen Variablen ist auf den Block beschränkt, in dem die statischen Variablen deklariert werden. Daher verfügt jeder Prozess standardmäßig über eine eigene Instanz der globalen und statischen DLL-Variablen.

und vonHier:

Beim dynamischen Verknüpfen von Modulen kann unklar sein, ob verschiedene Bibliotheken eigene Instanzen von Globals haben oder ob die Globals gemeinsam genutzt werden.

Vielen Dank.

Antworten auf die Frage(1)

Ihre Antwort auf die Frage