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.

questionAnswers(1)

yourAnswerToTheQuestion