Heim >Backend-Entwicklung >C++ >Wo werden statische Variablen in C- und C-ausführbaren Dateien gespeichert?

Wo werden statische Variablen in C- und C-ausführbaren Dateien gespeichert?

Barbara Streisand
Barbara StreisandOriginal
2024-12-30 12:07:12211Durchsuche

Where Are Static Variables Stored in C and C   Executables?

Eintauchen in die Speicherung statischer Variablen in C und C

Statische Variablen spielen eine entscheidende Rolle in der C- und C-Programmierung und ermöglichen, dass Daten während der gesamten Lebensdauer von a bestehen bleiben Programm. Aber wo genau werden diese Variablen in einer ausführbaren Datei gespeichert, um sicherzustellen, dass es nicht zu Namenskollisionen kommt?

Berücksichtigen Sie die folgenden Codeausschnitte:

// foo.c
static int foo = 1;
void fooTest() {
  static int bar = 2;
  foo++;
  bar++;
}

// bar.c
static int foo = 10;
void barTest() {
  static int bar = 20;
  foo++;
  bar++;
}

Beim Kompilieren und Verknüpfen dieser Dateien mit einer Hauptfunktion Wenn fooTest() und barTest() wiederholt aufgerufen werden, erhöhen sich die printf-Anweisungen unabhängig voneinander. Dies zeigt an, dass die Variablen „foo“ und „bar“ lokal für ihre jeweiligen Übersetzungseinheiten sind.

Speicherzuweisung statischer Variablen

Die Zuweisung statischer Variablen in einer ausführbaren Datei hängt von ihrer Initialisierung ab.

  • Null-initialisiert: Statische Daten, die auf Null initialisiert wurden, werden im abgelegt .BSS (Block gestartet durch Symbol)-Segment. Dieses Segment wird während der Programmausführung mit Nullen gefüllt.
  • Nicht-Null-initialisiert: Statische Daten, die mit Werten ungleich Null initialisiert wurden, werden im Segment .DATA platziert. Dieses Segment enthält initialisierte Daten und wird beim Programmstart in den Speicher geladen.

Toolchain-Abhängigkeit

Der spezifische Speicherort statischer Variablen kann je nach verwendeter Toolchain variieren. Nehmen wir für diese Diskussion an, dass wir die GNU Compiler Collection (GCC) verwenden.

Fazit

Statische Variablen in C und C werden im .BSS- oder .DATA-Segment einer ausführbaren Datei gespeichert Datei abhängig von ihrer Initialisierung. Dadurch wird sichergestellt, dass jede statische Variable einen eindeutigen Speicherort hat und Namenskollisionen vermieden werden.

Das obige ist der detaillierte Inhalt vonWo werden statische Variablen in C- und C-ausführbaren Dateien gespeichert?. 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