Maison > Article > développement back-end > Pourquoi `sizeof(myStruct2)` renvoie-t-il 12 octets alors que `sizeof(myStruct1)` renvoie 6 octets ?
Lorsqu'il s'agit de structures en C, l'alignement de la mémoire joue un rôle crucial dans l'optimisation de l'utilisation et des performances de la mémoire. Si vous êtes intrigué par la différence d'alignement de la mémoire entre les deux structures suivantes :
<code class="c">typedef struct { unsigned short v1; unsigned short v2; unsigned short v3; } myStruct1; typedef struct { unsigned short v1; unsigned short v2; unsigned short v3; int i; } myStruct2;</code>
où myStruct1 et myStruct2 ont la même taille de données combinée de 6 octets, mais myStruct2 signale une taille de 12 octets en utilisant sizeof(), la réponse réside dans l'alignement de la mémoire.
Sur la plupart des machines 32 bits, la limite d'alignement est généralement de 4 octets. Cela signifie que les structures sont alignées au multiple de 4 octets le plus proche. Dans myStruct1, chaque membre fait 2 octets, donc aucun remplissage n'est inséré entre eux et la taille réelle reste à 6 octets.
Cependant, dans myStruct2, l'ajout d'un entier de 4 octets (int) nécessite un Limite d'alignement de 4 octets. Étant donné que les 6 octets initiaux de données de la structure d'origine ne s'alignent pas sur une limite de 4 octets, 2 octets de remplissage sont insérés entre v3 et i. Ce remplissage garantit que i commence sur une limite de 4 octets, ce qui donne une taille totale de 12 octets pour myStruct2.
N'oubliez pas que dans la plupart des cas, les structures ne sont alignées que sur la limite de leur plus grand membre. Dans ce cas, le membre int de myStruct2 détermine la limite d'alignement, ce qui explique la différence d'alignement de la mémoire entre les deux structures.
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!