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

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
578 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!

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!