Wiem tylko, że zmienne globalne i statyczne są przechowywane w .data
segmencie, a niezainicjowane dane znajdują się w .bss
segmencie. Nie rozumiem, dlaczego mamy dedykowany segment dla niezainicjowanych zmiennych? Jeśli niezainicjalizowana zmienna ma przypisaną wartość w czasie wykonywania, czy ta zmienna nadal istnieje tylko w .bss
segmencie?
W następnym programie a
jest w .data
segmencie i b
jest w .bss
segmencie; czy to jest poprawne? Uprzejmie popraw mnie, jeśli źle rozumiem.
#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 ()
{
;
}
Weź również pod uwagę następujący program,
#include <stdio.h>
#include <stdlib.h>
int var[10]; /* Uninitialized so in .bss */
int main ()
{
var[0] = 20 /* **Initialized, where this 'var' will be ?** */
}