Rembourrage aligne les membres de structure "naturelle" de l'adresse de limites - dire, int
membres ont compensations, qui sont mod(4) == 0
sur une plateforme 32 bits. Le rembourrage est activé par défaut. Il insère la suite de "lacunes" dans votre première structure:
struct mystruct_A {
char a;
char gap_0[3]; /* inserted by compiler: for alignment of b */
int b;
char c;
char gap_1[3]; /* -"-: for alignment of the whole struct in an array */
} x;
D'emballage, d'autre part empêche le compilateur de faire padding - ce doit être explicitement demandée - sous GCC c'est __attribute__((__packed__))
, donc la suivante:
struct __attribute__((__packed__)) mystruct_A {
char a;
int b;
char c;
};
serait de produire une structure de la taille de l' 6
sur une architecture 32 bits.
Une note si - non alignés d'accès à la mémoire est plus lent sur des architectures qui permettent (comme x86 et amd64), et est explicitement interdite sur un strict alignement des architectures comme SPARC.