Solaris(64 位)开发者指南

对结构重新压缩

由于 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 之间会发生变化。请参见对齐问题