Linker, Loader und ausführbare Formate

Wo liegt während der Ausführung eine in einer C-Funktion deklarierte lokale Variable ohne static (automatische Variable)?

  1. AIn der Section .data
  2. BAuf dem Stack (oder in Registern)
  3. CAuf dem Heap
Antwort und Erläuterung anzeigen

Antwort: B. Auf dem Stack (oder in Registern)

Lokale Variablen werden beim Aufruf der Funktion im Stack-Frame angelegt (durch Optimierung können sie auch nur in Registern liegen) und verschwinden bei der Rückkehr aus der Funktion. Daher kann jeder Aufruf bei Rekursion auch bei beliebig tiefer Verschachtelung derselben Funktion eigene Variablen haben. In der ausführbaren Datei gibt es keine Section für lokale Variablen; der Speicher wird am Funktionsanfang durch Verschieben des Stack-Pointers reserviert.

Dieses Thema üben Zur Themenseite

Weitere Fragen zu Linker, Loader und ausführbare Formate

  1. Aus welchem Bereich eines Prozesses wird der mit malloc in C reservierte Speicher im Allgemeinen genommen?
  2. Welche Reihenfolge ist die richtige Speicheraufteilung eines üblichen Prozesses unter Linux u. a., von kleinen zu großen Adressen geordnet?
  3. Welcher Vorteil ergibt sich daraus, Heap und Stack eines Prozesses mit einem großen freien Bereich dazwischen in entgegengesetzte Richtungen wachsen zu lassen?
  4. Welche Aussage zum statischen Linken ist richtig?
  5. Welcher Vorteil des dynamischen Linkens (Shared Libraries) ist richtig?

Vergleiche zu diesem Thema