This is because of padding added to satisfy alignment constraints. Data structure alignment impacts both performance and correctness of programs:
SIGBUS
).Here's an example using typical settings for an x86 processor (all used 32 and 64 bit modes):
struct X
{short s;/* 2 bytes *//* 2 padding bytes */int i;/* 4 bytes */char c;/* 1 byte *//* 3 padding bytes */};struct Y
{int i;/* 4 bytes */char c;/* 1 byte *//* 1 padding byte */short s;/* 2 bytes */};struct Z
{int i;/* 4 bytes */short s;/* 2 bytes */char c;/* 1 byte *//* 1 padding byte */};constint sizeX =sizeof(X);/* = 12 */constint sizeY =sizeof(Y);/* = 8 */constint sizeZ =sizeof(Z);/* = 8 */
One can minimize the size of structures by sorting members by alignment (sorting by size suffices for that in basic types) (like structure Z
in the example above).