Pourquoi l' .segment bss nécessaire?

Ce que je sais, c'est que globales et les variables statiques sont stockées dans le .data segment, et des données non initialisées sont dans le .bss segment. Ce que je ne comprends pas, c'est pourquoi nous avons segment dédié pour les variables non initialisées? Si une variable non initialisée a une valeur attribuée au moment de l'exécution, la variable existe pas encore dans le .bss segment seulement?

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 erronée.

#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 ()
{
   ;
}  

Aussi, envisager la suite du 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 ?** */
}
  • Vous pouvez lire BSS que Mieux Économiser de l'Espace.
InformationsquelleAutor Whoami | 2012-03-02