Comportamento ambíguo do segmento .bss no programa C

Eu escrevi o programa C simples (test.c) abaixo: -

#include<stdio.h>
int main()
{
   return 0;
}

e executou o seguinte para entender as alterações de tamanho no segmento .bss.

gcc test.c -o test
size test

A saída saiu como: -

   text    data     bss     dec     hex filename
   1115     552       8    1675     68b test

Não declarei nada globalmente ou de escopo estático. Então, explique por que o tamanho do segmento bss é de 8 bytes.

Fiz a seguinte alteração: -

#include<stdio.h>
int x;    //declared global variable
int main()
{
   return 0;
}

Mas, para minha surpresa, o resultado foi o mesmo que o anterior: -

   text    data     bss     dec     hex filename
   1115     552       8    1675     68b test

Por favor explique. Inicializei o global: -

#include<stdio.h>
int x=67;    //initialized global variable
int main()
{
   return 0;
}

O tamanho do segmento de dados aumentou conforme o esperado, mas eu não esperava que o tamanho do segmento bss reduzisse para 4 (ao contrário de 8, quando nada foi declarado). Por favor explique.

text       data     bss     dec     hex filename
1115        556       4    1675     68b test

Eu também tentei os comandos objdump e nm, mas eles também mostraram variável x ocupando .bss (no segundo caso). No entanto, nenhuma alteração no tamanho do bss é mostrada no comando size.

Eu segui o procedimento de acordo com:http://codingfox.com/10-7-memory-segments-code-data-bss/ onde as saídas estão saindo perfeitamente conforme o esperado.

questionAnswers(2)

yourAnswerToTheQuestion