#include // variavel GLOBLA INICIADA, onde o primeiro valor é o caracter 'a' e os // demais vazios... char vetor[1000] = {'a'}; /* A diferenca com o código anterior é que a variavel global é INICIADA ... veja o comando size..... veja que agora SIM o campo DATA aumenta em 1000 e o bss "perde" quantidade equivalente.. DATA: indica o espaco gasto com todas as variaveis globais INICIALIZADAS em seu programa... O que acontece: 1) o espaco DATA e aquele ocupado por variáveis GLOBAIS do seu programa, desde que esteja INICIADA (INICIALIZADAS). 2) Se a variavel nao estiver ou nao for inicializada, o espaco ocupado por ela fica contabilizado em bss. BSS >>>> BLOCK START OF SYMBOL BSS indica o quanto de memoria para variaves globais NAO INICIALIZADAS seu programa vai precisar quando FINALMENTE FOR EXECUTADO. (portanto, o valor indicado em bss eh apenas uma estimativa da quantidade de memoria para variaveis GLOBAIS que o seu programa irá precisar quando este finalmente for carregado na memoria RAM pelo LOADER !!!!!) para vc se convencer, compare os tamanhos dos codigos executaveis de stack2.c e stack3.c. O executável do stack2 tem praticamente o mesmo tamanho do executavel de stack1, mas quando for carregado em memoria em, TEMPO DE EXECUCAO, O LOADER se encarregará de arrumar espaço para todas as variáveis NAO INICIALIZADAS... Já o tamanho do executável de stack3 tem cerca de 1000 bytes a mais, justamente porque o vetor INICIALIZADO é parte de DATA, portanto, parte integrante do executável desde a sua origem !!! não é incrível ????? Curiosidade: uma vez que o programa é carregado na memoria e está pronto para executar, nao há distinção alguma entre as variaveis que vem do espaco DATA ou as que sao reservadas pelo LOADER e indicadas no BSS. ambos espacos podem ser entendidos apenas por espaco de dados (data space). A pergunta final: e variáveis locais (aquelas declaradas dentro de uma função, a funcao main incluida), INICIALIZADAS ou NAO, como ficam ???? */ int main(void) { printf("Hello World!\n"); return 0; }