Ce que je sais, c'est que les variables globales et statiques sont stockées dans le .data
segment et que les données non initialisées sont dans le .bss
segment. Ce que je ne comprends pas, c'est pourquoi avons-nous un segment dédié pour les variables non initialisées? Si une variable non initialisée a une valeur affectée au moment de l'exécution, la variable existe-t-elle encore dans le .bss
segment uniquement?
Dans le programme suivant, a
est dans le .data
segment, et b
est dans le .bss
segment; Est-ce exact? Veuillez me corriger si ma compréhension est fausse.
#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 ()
{
;
}
Pensez également à suivre le programme,
#include <stdio.h>
#include <stdlib.h>
int var[10]; /* Uninitialized so in .bss */
int main ()
{
var[0] = 20 /* **Initialized, where this 'var' will be ?** */
}