In C und C werden statische Variablen in bestimmten Segmenten einer ausführbaren Datei zugewiesen, um Namenskonflikte zwischen verschiedenen Übersetzungseinheiten zu vermeiden. Beim Kompilieren mehrerer Quelldateien, wie etwa der foo.c- und bar.c-Dateien im bereitgestellten Code, erstellt jede Übersetzungseinheit eine eigene Kopie der statischen Variablen.
Der Speicherort statischer Variablen hängt davon ab, ob Sie werden auf Null initialisiert oder nicht. Mit Null initialisierte Statiken werden im .BSS-Segment platziert, während nicht mit Null initialisierte Statiken in das .DATA-Segment gehen.
Im gegebenen Beispiel werden sowohl foo als auch bar auf Werte ungleich Null initialisiert. Daher werden sie im .DATA-Segment zugeordnet. Der Compiler reserviert im .DATA-Segment Platz für diese Variablen und ihre Werte werden dort gespeichert.
Wenn die ausführbare Datei verknüpft ist, werden die Inhalte der .DATA- und .BSS-Segmente in die entsprechenden Abschnitte des kopiert ELF-Datei. Das .DATA-Segment wird normalerweise in den .text-Abschnitt (Code) eingefügt, während das .BSS-Segment zur Laufzeit im BSS-Bereich des Programmspeichers zugewiesen wird.
In der GCC-Toolchain der Ort der Statik Variablen können mit der Option -Xlinker -d' untersucht werden, die die ELF-Abschnitte und ihren Inhalt anzeigt. Durch die Untersuchung der Abschnitte „.data“ und „.bss“ können Sie die Zuordnung Ihrer statischen Variablen überprüfen und sicherstellen, dass sie nicht miteinander in Konflikt geraten.
Das obige ist der detaillierte Inhalt vonWo werden statische Variablen in C und C zugeordnet?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!