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

Pourquoi la taille d'une structure C avec des membres courts n'est-elle pas toujours un multiple de la taille des membres ?

Barbara Streisand
Libérer: 2024-10-26 13:00:29
original
526 Les gens l'ont consulté

Why is the size of a C struct with short members not always a multiple of the member size?

Comprendre l'alignement de la mémoire dans les structures C

L'alignement de la mémoire est un concept crucial dans la programmation C car il a un impact sur la façon dont les données sont stockées en mémoire et accédé par le processeur. Dans le contexte des structures, l'alignement de la mémoire dicte la manière dont les membres individuels d'une structure sont disposés en mémoire.

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

Sur une machine 32 bits où l'alignement de la mémoire est généralement défini sur 4 octets, on pourrait s'attendre à ce que la taille totale de cette structure soit de 8 octets. Cependant, l'opérateur sizeof(myStruct) ne renvoie que 6 octets.

La divergence survient parce que chaque membre de la structure, étant un short non signé, a une taille de 2 octets. Puisque tous les membres ont la même taille, aucun remplissage n’est inséré entre eux. En conséquence, la structure occupe 6 octets en mémoire.

Maintenant, modifions la structure :

<code class="c">typedef struct {
    unsigned short v1;
    unsigned short v2;
    unsigned short v3;
    int i;
} myStruct;</code>
Copier après la connexion

Dans ce cas, la présence d'un membre int, qui a une taille de 4 octets, modifie l'alignement de la mémoire de la structure. Le membre int doit être aligné sur une limite de 4 octets. Puisqu'il est précédé de 6 octets, 2 octets de remplissage sont insérés entre v3 et i. Cela porte la taille totale de la structure à 12 octets, comme le confirme sizeof(myStruct).

En résumé, l'alignement de la mémoire dans les structures C garantit que les membres sont correctement alignés en mémoire pour optimiser les performances du processeur et réduire l'utilisation de la mémoire. . Les types sont uniquement alignés sur une limite aussi grande que le type lui-même. Lorsqu'un type plus grand est introduit, il définit l'alignement de la structure entière, introduisant potentiellement un remplissage pour maintenir l'alignement souhaité.

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!