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.