champ de bits de padding dans C

Continue mes expériences en C, je voulais voir comment les champs de bits sont placés dans la mémoire. Je suis en train de travailler sur des processeurs Intel 64 bits de la machine. Voici mon bout de code:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdint.h>
int main(int argc, char**argv){
       struct box_props
       {
         unsigned int opaque       : 1;
         unsigned int fill_color   : 3;
         unsigned int              : 4; 
         unsigned int show_border  : 1;
         unsigned int border_color : 3;
         unsigned int border_style : 2;
         unsigned int              : 2; 
       };

       struct box_props s;
       memset(&s, 0, 32);
       s.opaque = 1;
       s.fill_color = 7;
       s.show_border = 1;
       s.border_color = 7;
       s.border_style = 3;

       int i;
       printf("sizeof box_porps: %d sizeof unsigned int: %d\n", sizeof(struct box_props), sizeof(unsigned int));
       char *ptr = (char *)&s;
       for (i=0; i < sizeof(struct box_props); i++){
          printf("%x = %x\n", ptr + i, *(ptr + i));
       }

       return 0;

et voici un sortie:

sizeof box_porps: 4 sizeof unsigned int: 4
5be6e2f0 = f
5be6e2f1 = 3f
5be6e2f2 = 0
5be6e2f3 = 0

Et voici la question: pourquoi struct box_props a taille 4 - ne peut pas juste être 2 octets ? Comment rembourrage est fait dans ce cas ? Je suis peu (nomen omen) confondue avec elle.

Thx d'avance pour toutes les réponses

Je pense que c'est parce que vous êtes à l'aide de type int, essayez d'utiliser short int si vous voulez la taille 2.essayer d'envoyer un feedback
memset(&s, 0, 32); Ouch! Vous vous demandez memset à zéro de 32 octets, mais ont seulement quatre. Vous êtes juste malchanceux qui n'avaient pas de détruire une partie essentielle de la pile, et qui a causé votre programme de crash violemment.

OriginalL'auteur JosiP | 2013-05-22