Quello che so è che le variabili globali e statiche sono memorizzate nel .datasegmento e i dati non inizializzati sono nel .bsssegmento. Quello che non capisco è perché abbiamo un segmento dedicato per variabili non inizializzate? Se una variabile non inizializzata ha un valore assegnato in fase di esecuzione, la variabile esiste ancora solo nel .bsssegmento?
Nel programma seguente, aè nel .datasegmento ed bè nel .bsssegmento; è corretto? Gentilmente correggimi se la mia comprensione è sbagliata.
#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 ()
{
;
}
Inoltre, considera il seguente programma,
#include <stdio.h>
#include <stdlib.h>
int var[10]; /* Uninitialized so in .bss */
int main ()
{
var[0] = 20 /* **Initialized, where this 'var' will be ?** */
}