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: 305

Filed under:
|
|

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

Related posts about c++

Related posts about sizeof