Maison >développement back-end >C++ >Pourquoi une structure C avec 3 entiers courts a-t-elle une taille de 6 octets, mais une structure similaire avec un entier ajouté a-t-elle une taille de 12 octets ?
Alignement de la mémoire dans les structures C
En informatique, l'alignement de la mémoire fait référence aux restrictions placées sur les adresses auxquelles les données peuvent être stockées en mémoire . Comprendre l'alignement de la mémoire est crucial pour optimiser les performances du code et éviter les comportements inattendus.
Énoncé du problème :
Vous travaillez sur un système 32 bits où l'alignement de la mémoire est généralement réglé sur 4 octets. Considérez la structure suivante :
<code class="c">typedef struct { unsigned short v1; unsigned short v2; unsigned short v3; } myStruct;</code>
La structure contient trois champs de 2 octets, mais l'utilisation de l'opérateur sizeof renvoie 6 octets au lieu des 8 octets attendus. À l'inverse, la structure suivante :
<code class="c">typedef struct { unsigned short v1; unsigned short v2; unsigned short v3; int i; } myStruct;</code>
renvoie une taille de 12 octets, comme prévu en raison du nombre accru de champs et du potentiel de remplissage. Pourquoi y a-t-il une différence dans les tailles obtenues ?
Explication :
Sur la plupart des machines, les types de données sont alignés sur une limite ne dépassant pas leur taille. Dans ce cas, short fait 2 octets et int vaut 4 octets.
First Struct :
Deuxième structure :
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!