Aula 17: union e como ela difere de struct
Uma struct dá a cada campo sua própria memória — mas C também tem um gêmeo econômico: a union. Em uma union, todos os membros compartilham a mesma área de memória, então só um deles está 'vivo' a cada momento. union Value { int i; double d; }; ocupa o tamanho do seu maior membro (8 bytes para o doub
Uma struct é um apartamento com um quarto para cada inquilino; uma union é um único quarto com uma única cama — quando um inquilino novo se muda para lá, o anterior simplesmente é despejado. A qualquer momento, exatamente um mora ali.
- union
- Um tipo cujos membros compartilham todos a mesma área de memória — só um membro é válido de cada vez.
- memória compartilhada (sobreposição)
- Todos os membros de uma union começam no mesmo endereço; escrever em um sobrescreve os bits dos outros.
- sizeof de uma union
- O tamanho do maior membro. Em uma struct, ao contrário — aproximadamente a soma dos membros, às vezes mais por causa do padding.
- padding (preenchimento)
- Bytes vazios que o compilador acrescenta a uma struct para alinhar os campos na memória — então sizeof às vezes é maior que a soma dos campos.
- tag de tipo
- Um campo complementar (um int ou enum) mantido ao lado da union para lembrar qual membro está válido no momento.