zmienna całkowita w bss i segmencie danych
Używam programu testowego do zrozumienia modelu pamięci C na Linuksie 6.3 z wersją kernal 2.6.32-279.el6.x86_64.
Najpierw kompiluję poniżej kodu,
#include <stdio.h>
int main(void)
{
static int i = 100; /* Initialized static variable stored in DS*/
return 0;
}
na komendę rozmiaru uruchomionego, mam poniżej,
[root@rachitjain jan14]# size a.out
text data bss dec hex filename
1040 488 16 1544 608 a.out
następnie, po usunięciu intializacji dla zmiennej statycznej „i”, mój kod staje się,
include <stdio.h>
int main(void)
{
static int i ;
return 0;
}
Przy uruchomionym rozmiarze po skompilowaniu powyżej,
[root@rachitjain jan14]# size a.out
text data bss dec hex filename
1040 484 24 1548 60c a.out
Jest 8-bajtowy przyrost w sekcji bss, ale tylko 4 bajty są zmniejszone w sekcji danych. Dlaczego rozmiar jest całkowity, gdy się podwaja podczas przechodzenia do segmentu bss?
Testowałem tę postać i pływałem, obserwowałem to samo zachowanie.