由于 long 和指针字段在 LP64 中会增加到 64 位,因此编译器可能会向结构中添加额外的填充内容,以满足对齐要求。对于 SPARCV9 ABI 和 amd64 ABI,所有类型的结构均与结构中最长成员的长度对齐。对结构重新压缩时,一个简单的规则就是,将 long 和指针字段移到结构开头,然后重新排列其余的字段,通常(但不总是)按长度的降序排列,具体取决于这些字段可以压缩的程度。例如,
struct bar { int i; long j; int k; char *p; }; /* sizeof (struct bar) = 32 */
要获取更好的结果,请使用:
struct bar { char *p; long j; int i; int k; }; /* sizeof (struct bar) = 24 */
基本类型的对齐方式在 i386 和 amd64 ABI 之间会发生变化。请参见对齐问题。