Quello che so è che le variabili globali e statiche sono memorizzate nel .data
segmento e i dati non inizializzati sono nel .bss
segmento. 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 .bss
segmento?
Nel programma seguente, a
è nel .data
segmento ed b
è nel .bss
segmento; è 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 ?** */
}