Lo que sé es que las variables globales y estáticas se almacenan en el .data
segmento y los datos no inicializados están en el .bss
segmento. Lo que no entiendo es por qué tenemos un segmento dedicado para las variables no inicializadas. Si una variable no inicializada tiene un valor asignado en tiempo de ejecución, ¿existe la variable .bss
solo en el segmento?
En el siguiente programa, a
está en el .data
segmento y b
está en el .bss
segmento; ¿Es eso correcto? Por favor corríjame si mi comprensión es incorrecta.
#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 ()
{
;
}
Además, considere el siguiente programa,
#include <stdio.h>
#include <stdlib.h>
int var[10]; /* Uninitialized so in .bss */
int main ()
{
var[0] = 20 /* **Initialized, where this 'var' will be ?** */
}