Linker, Loader und ausführbare Formate

Welche Aussage zu den Werten lokaler und globaler Variablen ohne Initialwert zu Beginn ihrer Verwendung in C ist richtig?

  1. ABeide beginnen stets mit 0
  2. BLokale Variablen beginnen mit 0, der Wert globaler Variablen ist unbestimmt
  3. CGlobale Variablen beginnen mit 0, der Wert lokaler Variablen ist nicht festgelegt (unbestimmt)
Antwort und Erläuterung anzeigen

Antwort: C. Globale Variablen beginnen mit 0, der Wert lokaler Variablen ist nicht festgelegt (unbestimmt)

Globale und statische Variablen liegen in .bss und werden beim Programmstart mit 0 gefüllt, beginnen also mit 0. Lokale Variablen werden bei jedem Funktionsaufruf auf dem Stack angelegt; sie jedes Mal mit 0 zu füllen würde Zeit kosten, daher können dort noch Daten einer früheren Nutzung dieser Stelle stehen. Beim Lesen nicht initialisierter lokaler Variablen kann sich das Ergebnis von Ausführung zu Ausführung ändern; sie sind daher stets zu initialisieren.

Dieses Thema üben Zur Themenseite

Weitere Fragen zu Linker, Loader und ausführbare Formate

  1. Wie heißt das Phänomen, dass sich nach wiederholtem malloc und free zwar insgesamt genug freier Speicher findet, aber ein großer zusammenhängender Bereich nicht mehr reserviert werden kann?
  2. Welcher Vorteil ergibt sich, wenn man beim Erstellen einer Shared Library nur die von außen genutzten Funktionen veröffentlicht und die Sichtbarkeit (Visibility) der Symbole interner Funktionen auf „hidden“ setzt?
  3. Welcher Mechanismus lässt in C++ die Konstruktoren globaler Objekte vor main ausführen?
  4. Welche Aussage zur vom Compiler aus einer Quelldatei ausgegebenen Objektdatei (.o) ist richtig?
  5. Welche Aussage zur Hauptaufgabe des Linkers ist richtig?

Vergleiche zu diesem Thema