schnorr / mlp

Disciplina de Modelos de Linguagens de Programação - INF/UFRGS
19 stars 11 forks source link

Questionario 9 - Questao 9 #6

Open lauracorssac opened 6 years ago

lauracorssac commented 6 years ago

Oi, professor e colegas! Não entendi porque a estrutura Chave ocupa 16 bytes e não 24. Para mim seria:

Nome | Nome | Nome | Nome | Nome | Nome | Nome | Nome | Nome | lixo | c. | lixo | k | lixo | lixo | lixo | x | x | x | x | lixo | lixo | lixo | lixo |

Robuske commented 6 years ago

Também estava com essa dúvida, mas fazendo uns testes fiquei com mais dúvidas ainda, acho que a resposta de ambas estão erradas, ou eu não entendi. Se a seguinte estrutura ocupa 32 bytes

struct element {
    char name[5];
    char sobre[3];
    int atomic_number;
    double atomic_weight;
    char c;
};

Por que trocar atomic_weight por int faz ela ocupar 20 bytes?

lanahra commented 6 years ago

https://stackoverflow.com/a/2749096

Eu achei essa resposta que tenta explicar como funciona a ocupação de structs em C, porém, se tu ler um pouco mais a respeito, tu descobre que tudo depende.

Depende do sistema, da arquitetura e do compilador. O compilador tem a liberdade que ele quiser pra implementar isso, a única restrição é que a ordem das variáveis tem que ser mantida.

schnorr commented 6 years ago

@lanahra Obrigado pelo link; a forma como é feito o endereçamento e organização da estrutura em memória parece depender da implementação da linguagem (compilador).