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. Numa union, todos os membros partilham 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 double),
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 partilham todos a mesma área de memória — só um membro é válido de cada vez.
- memória partilhada (sobreposição)
- Todos os membros de uma union começam no mesmo endereço; escrever num sobrescreve os bits dos outros.
- sizeof de uma union
- O tamanho do maior membro. Numa 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.