The size of a structure is not always equal to the sum of the sizes of its members. According to Section 6.7.2.1 of the C standard states, "There may be unnamed padding within a structure object, but not at its beginning" [ISO/IEC 9899:2011].
This is often called structure padding. Structure members are arranged in memory as they are declared in the program text. Padding may be added to the structure to ensure the structure is properly aligned in memory. Structure padding allows for faster member access on many architectures.
...
CERT C++ Secure Coding Standard: EXP03-CPP. Do not assume the size of a class or struct is the sum of the sizes of its members
ISO/IEC 9899:2011 Section Section 6.7.2.1, "Structure and union specifiers"
...
[Dowd 2006] Chapter 6, "C Language Issues" ("Structure Paddingpadding," pp. 284–287)
[Sloss 2004] Section 5.7, "Structure arrangement"
...