Avatar ·

Pourquoi sizeof(struct) n'est-il pas égal à la somme des sizeof de tous ses champs en C++ ?

Bonjour ! J'ai commencé à apprendre le C++ et j'ai rencontré un comportement incompréhensible. J'ai une structure simple : ```cpp struct MyStruct { char c; // 1 byte int i; // 4 bytes short s; // 2 bytes }; ``` Logiquement, je m'attends à ce que la taille de cette structure soit 1 + 4 + 2 = 7 bytes. Cependant, quand j'affiche `sizeof(MyStruct)`, le compilateur montre 12 ! Pourquoi cela se produit-il ? J'ai vérifié avec différents ordres des champs, et la taille change. Par exemple, si je mets `int` en premier, la taille devient parfois 8. Est-ce un bug du compilateur ou est-ce que je ne comprends pas quelque chose ? Expliquez-moi, s'il vous plaît, comment fonctionne réellement l'allocation mémoire pour les structures en C++. <<>>

Pourquoi la taille de la structure est-elle plus grande que la somme de ses champs ?

Non, ce n'est pas un bug du compilateur. C'est une particularité de la gestion de la mémoire appelée alignement (alignment) et remplissage (padding). Le processeur ne lit pas la mémoire octet par octet — il travaille avec des blocs de données dont la taille est généralement de 4 ou 8