Comment sizeof calcule la taille des structures

Je sais qu'un char et int sont calculés comme étant de 8 octets sur les architectures 32 bit en raison de l'alignement, mais je suis récemment tombé sur une situation où une structure avec 3 courts métrages a été signalé comme étant de 6 octets par l'opérateur sizeof. Le Code est comme suit:

#include <iostream>
using namespace std ;

struct IntAndChar
{
    int a ;
    unsigned char b ;
};


struct ThreeShorts
{
    unsigned short a ;
    unsigned short b ;
    unsigned short c ;
};


int main()
{
    cout<<sizeof(IntAndChar)<<endl; //outputs '8'
    cout<<sizeof(ThreeShorts)<<endl; //outputs '6', I expected this to be '8'
    return 0 ;
}

Compilateur g++ (Debian 4.3.2-1.1) 4.3.2. Cela m'étonne vraiment, c', pourquoi n'est-ce pas l'alignement appliquée pour la structure contenant 3 courts métrages?

source d'informationauteur Gearoid Murphy