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 ?

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 ?

Linda Hamilton
Libérer: 2024-10-26 13:53:02
original
693 Les gens l'ont consulté

 Why Does a C Structure with 3 Short Integers Have a Size of 6 Bytes, But a Similar Structure with an Integer Added Has a Size of 12 Bytes?

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

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

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 :

    • Puisque tous les membres sont 2 octets, la structure est alignée sur une limite de 2 octets.
    • Aucun remplissage n'est inséré entre les membres, ce qui donne une taille totale de 6 octets.
  • Deuxième structure :

    • La présence d'un entier de 4 octets nécessite que la structure soit alignée sur une limite de 4 octets.
    • 2 octets de remplissage sont inséré entre v3 et i pour assurer un bon alignement, portant la taille totale à 12 octets.

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!

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