Was ich weiß ist, dass globale und statische Variablen im .dataSegment gespeichert sind und nicht initialisierte Daten im .bssSegment sind. Was ich nicht verstehe ist, warum wir ein dediziertes Segment für nicht initialisierte Variablen haben? Wenn einer nicht initialisierten Variablen zur Laufzeit ein Wert zugewiesen wurde, ist die Variable dann nur noch im .bssSegment vorhanden?
Im folgenden Programm abefindet sich im .dataSegment und bbefindet sich im .bssSegment; Ist das korrekt? Bitte korrigieren Sie mich, wenn mein Verständnis falsch ist.
#include <stdio.h>
#include <stdlib.h>
int a[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9};
int b[20]; /* Uninitialized, so in the .bss and will not occupy space for 20 * sizeof (int) */
int main ()
{
;
}
Beachten Sie auch das folgende Programm:
#include <stdio.h>
#include <stdlib.h>
int var[10]; /* Uninitialized so in .bss */
int main ()
{
var[0] = 20 /* **Initialized, where this 'var' will be ?** */
}