Linker, Loader und ausführbare Formate

Welche Aussage zu den Merkmalen der Section .bss ist richtig?

  1. ASie ist der Bereich, in dem lokale Variablen einer Funktion bei jedem Aufruf abgelegt werden
  2. BSie ist der Bereich für Variablen ohne Initialwert (oder mit 0); in der Datei wird nur die Größe vermerkt, und beim Laden wird mit 0 gefüllt
  3. CSie ist ein nicht beschreibbarer Bereich für konstante Zeichenketten
Antwort und Erläuterung anzeigen

Antwort: B. Sie ist der Bereich für Variablen ohne Initialwert (oder mit 0); in der Datei wird nur die Größe vermerkt, und beim Laden wird mit 0 gefüllt

Globale und statische Variablen ohne Initialwert beginnen nach den Regeln von C mit 0. Wenn der Inhalt vollständig 0 ist, wäre es Verschwendung, Nullen in der Datei zu speichern; für die Section .bss wird daher nur die Größe vermerkt, und der Loader reserviert den Speicher und füllt ihn mit 0. Auch bei „static char buf[1000000];“ wird die ausführbare Datei beispielsweise nicht um 1 MB größer.

Dieses Thema üben Zur Themenseite

Weitere Fragen zu Linker, Loader und ausführbare Formate

  1. Die Ausführung von „char *p = "hello"; p[0] = 'H';“ in C führt in vielen Umgebungen zu einem abnormalen Abbruch. Welcher Grund ist richtig?
  2. Welche Kombination der obigen globalen Variablen wird im Allgemeinen in der Section .bss abgelegt?
  3. Wo liegt während der Ausführung eine in einer C-Funktion deklarierte lokale Variable ohne static (automatische Variable)?
  4. Aus welchem Bereich eines Prozesses wird der mit malloc in C reservierte Speicher im Allgemeinen genommen?
  5. Welche Reihenfolge ist die richtige Speicheraufteilung eines üblichen Prozesses unter Linux u. a., von kleinen zu großen Adressen geordnet?

Vergleiche zu diesem Thema