How does sizeof calculate the size of structures
        Posted  
        
            by Gearoid Murphy
        on Stack Overflow
        
        See other posts from Stack Overflow
        
            or by Gearoid Murphy
        
        
        
        Published on 2010-04-17T19:30:09Z
        Indexed on 
            2010/04/17
            19:33 UTC
        
        
        Read the original article
        Hit count: 358
        
I know that a char and an int are calculated as being 8 bytes on 32 bit architectures due to alignment, but I recently came across a situation where a structure with 3 shorts was reported as being 6 bytes by the sizeof operator. Code is as follows:
#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 ;
}
Compiler : g++ (Debian 4.3.2-1.1) 4.3.2. This really puzzles me, why isn't alignment enforced for the structure containing 3 shorts?
© Stack Overflow or respective owner