Leçon 17 : union et sa différence avec struct
Une struct donne à chaque champ sa propre mémoire — mais le C a aussi un jumeau économe : union. Dans une union, tous les champs partagent la même zone mémoire, donc un seul d'entre eux est 'vivant' à chaque instant. union Value { int i; double d; }; occupe la taille de son plus grand membre (8 octe
Une struct est un appartement avec une chambre pour chaque locataire ; une union est une seule chambre avec un seul lit — quand un nouveau locataire arrive, le précédent est simplement jeté dehors. À chaque instant, exactement un y habite.
- union
- Un type dont tous les membres partagent la même zone mémoire — un seul membre est valide à la fois.
- mémoire partagée
- Tous les membres d'une union commencent à la même adresse ; écrire dans l'un écrase les bits des autres.
- sizeof d'une union
- La taille du plus grand membre. Dans une struct, en revanche — à peu près la somme des membres, parfois plus à cause du padding.
- padding
- Des octets vides que le compilateur ajoute à une struct pour aligner les champs en mémoire — donc sizeof est parfois plus grand que la somme des champs.
- étiquette de type (tag)
- Un champ compagnon (int ou enum) qu'on garde à côté de l'union pour se souvenir quel membre est valide en ce moment.