I thought I understood how C/C++ handled struct member alignment. But I\'m getting strange results for a particular arrangement in Visual Studio 2008 and 2010.
Speci
From the MSDN documentation for #pragma pack (where n is the value you set):
The alignment of a member will be on a boundary that is either a multiple of
nor a multiple of the size of the member, whichever is smaller.
sizeof(short) is two bytes, which is smaller than the packing value of four bytes that you set, so the short member is aligned to a two byte boundary.
The last char (c2) is padded with an extra byte after it so that when Alignment objects are placed in an array, the short element is still correctly aligned on a two-byte boundary. Array elements are contiguous and there can be no padding between them, so padding must be added to the end of the structure in order to ensure proper alignment in arrays.