Linker, Loader und ausführbare Formate

Was geschieht unter Linux u. a. im Allgemeinen, wenn eine zu tiefe Rekursion die Obergrenze des Stacks überschreitet?

  1. ADas Programm berührt die hinter dem Stack liegende, für Zugriffe gesperrte Guard Page und wird abnormal beendet
  2. BDas Betriebssystem lagert den Stack automatisch auf die Festplatte aus, sodass beliebig tief rekursiert werden kann
  3. CAlte Stack-Frames werden automatisch gelöscht, und die Berechnung wird korrekt fortgesetzt
Antwort und Erläuterung anzeigen

Antwort: A. Das Programm berührt die hinter dem Stack liegende, für Zugriffe gesperrte Guard Page und wird abnormal beendet

Der Stack hat eine Obergrenze, hinter der eine für Zugriffe gesperrte Guard Page liegt. Erreicht der Stack bei zu tiefer Rekursion diese, tritt ein Seitenfehler auf, und das Betriebssystem beendet das Programm (Segmentation Fault). Der Vorteil der Guard Page ist, dass das Programm gestoppt werden kann, bevor andere Daten zerstört werden. Dasselbe passiert bei großen Arrays als lokalen Variablen; große Daten legt man daher sicherer auf dem Heap ab.

Dieses Thema üben Zur Themenseite

Weitere Fragen zu Linker, Loader und ausführbare Formate

  1. Welche Aussage zu den Werten lokaler und globaler Variablen ohne Initialwert zu Beginn ihrer Verwendung in C ist richtig?
  2. 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?
  3. 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?
  4. Welcher Mechanismus lässt in C++ die Konstruktoren globaler Objekte vor main ausführen?
  5. Welche Aussage zur vom Compiler aus einer Quelldatei ausgegebenen Objektdatei (.o) ist richtig?

Vergleiche zu diesem Thema