Quelle est la taille d'une structure avec des Champs de Bits déterminé/mesuré?

#include <stdio.h>

typedef struct size
{
        unsigned int a:1;
        unsigned int b:31;
        unsigned int c:1;
} mystruct;

int main()
{
        mystruct a;
        printf("%d", sizeof(a));
        return 0;
}
  • Avec int b:31, la sortie est de 8.
  • Avec int b:1, la sortie est 4.
  • Avec int b:32, la sortie est de 12.

Quelqu'un peut-il expliquer la raison?

  • Si vous avez toujours voulu savoir quand une machine 64 bits utilise moins d'espace qu'une machine 32 bits (ou, au moins, pas plus de place qu'une machine 32 bits), alors c'est un exemple.
  • Êtes-vous sûr? GCC sur x64 Linux/ELF dit que la taille est de 12 pour l' (1,32,1) cas. Je crois que la seule chose qui influe sur la taille de ces structures est la taille du type sous-jacent, qui dans ce cas est unsigned int.
  • ISO/IEC 9899:2011 §6.7.2.1 de la Structure et de l'union des prescripteurs: L'expression qui spécifie la largeur d'un peu de champ doit être une expression constante entière avec un positif de la valeur qui ne dépasse pas la largeur d'un objet de ce type qui seront précisées étaient le côlon et l'expression omis. Je pense que prend en charge votre contention...mais si nous devions trouver un ILP64 de la machine (au lieu de l'habituel LP64 machines), alors je vous agiter autour d'elle.
InformationsquelleAutor Jagan | 2010-11-09