7 Stimmen

Verhalten von statischen Variablen in dynamisch verknüpften Bibliotheken (C/C++)

Wie erörtert aquí wird eine statische Variable im .BSS- oder .DATA-Segment gespeichert.

Wo wird dieser Speicher gespeichert, wenn sich die statische Variable in einer Funktion befindet, die in einer dynamisch verlinkten Bibliothek enthalten ist? Wird der Speicher für diese Variable im .BSS- oder .DATA-Segment des Verknüpfungsprozesses zum Zeitpunkt der Verknüpfung zugewiesen?

7voto

Rob K Punkte 8547

Die statische Variable befindet sich im Abschnitt .BSS oder .DATA der DLL-Datei. Die ausführbare Datei, die mit der DLL verknüpft ist, wird wahrscheinlich nicht einmal wissen, dass sie existiert. Wenn die EXE die DLL lädt, richtet das System die Datenabschnitte der DLL für sie ein und ruft dann die Funktion DllMain() auf. Zu diesem Zeitpunkt wird die Statik der DLL erstellt und initialisiert.

1voto

AProgrammer Punkte 49452

Ja. Die Unterschiede zwischen den verschiedenen Arten von statischen Variablen sind:

  • der Umfang

  • die Initialisierungszeit für diejenigen, die dynamisch initialisiert werden.

Die Implementierung (und beachten Sie, dass BSS- und DATA-Segmente Implementierungsdetails sind) ist in der Regel die gleiche. Um die korrekte Initialisierung dynamisch initialisierter statischer Funktionsvariablen zu gewährleisten, besteht eine Möglichkeit darin, einen zusätzlichen booleschen Wert hinzuzufügen, der angibt, dass eine dynamische Initialisierung erforderlich ist.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X