Maison > développement back-end > C++ > le corps du texte

Pourquoi `sizeof(myStruct2)` renvoie-t-il 12 octets alors que `sizeof(myStruct1)` renvoie 6 octets ?

Mary-Kate Olsen
Libérer: 2024-10-26 10:01:03
original
397 Les gens l'ont consulté

Why Does `sizeof(myStruct2)` Return 12 Bytes While `sizeof(myStruct1)` Returns 6 Bytes?

Alignement de la mémoire dans les structures C

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>
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!