Aligning aggregate data

Normally, structures are aligned according to the most strictly aligned member in both 32-bit and 64-bit modes. However, since long types and pointers change size and alignment in 64-bit modes, the alignment of a structure's strictest member can change, resulting in changes to the alignment of the structure itself.

Structures that contain pointers or long types cannot be shared between 32-bit and 64-bit applications. Unions that attempt to share long and int types or overlay pointers onto int types can change the alignment. In general, you need to check all but the simplest structures for alignment and size dependencies.

In 64-bit mode, member values in a structure passed by value to a va_arg argument might not be accessed properly if the size of the structure is not a multiple of 8-bytes.

Any aggregate data written to a file in one mode cannot be correctly read in the other mode. Data exchanged with other languages has the similar problems.