In C and C++, a union is aligned according to the alignment requirements of its largest member. For example:
union U{ char c; short s; int i;};
The union U has three members, each having a different size and alignment requirement. For instance, the member c occupies only a single byte and can be aligned on a byte boundary. The member i, on the other hand, occupies 4-bytes on a 32-bit architecture and can be located at a memory address that is evenly divisible by 4. Consequently, the compiler sees that every instance of U is located at a memory address that is evenly divisible by 4.