Lección 17: union y en qué se diferencia de struct
Un struct le da a cada campo su propia memoria — pero C también tiene un gemelo ahorrativo: union. En un union todos los miembros comparten la misma área de memoria, así que solo uno de ellos está 'vivo' en cada momento. union Value { int i; double d; }; ocupa el tamaño de su miembro más grande (8 b
Un struct es un apartamento con una habitación para cada inquilino; un union es una sola habitación con una sola cama — cuando llega un inquilino nuevo, simplemente se saca al anterior. En cada momento vive exactamente uno.
- union
- Un tipo cuyos miembros comparten todos la misma área de memoria — solo un miembro es válido a la vez.
- memoria compartida (superposición)
- Todos los miembros de un union empiezan en la misma ubicación; escribir en uno sobrescribe los bits de los demás.
- sizeof de un union
- El tamaño del miembro más grande. En un struct, en cambio — aproximadamente la suma de los miembros, a veces más por el padding.
- padding (relleno)
- Bytes vacíos que el compilador agrega a un struct para alinear los campos en memoria — así que sizeof a veces es mayor que la suma de los campos.
- etiqueta de tipo
- Un campo acompañante (un int o enum) que se guarda junto al union para recordar cuál miembro es válido en este momento.