1. 在 64 位 Linux 下,结构体字段默认按 8 字节对齐;32 位 Linux 下,默认 4 字节对齐。
2. 显示指定对齐方式时,会受到机器字长的约束,即 64 位 Linux 下可以按 8 字节及以下的任意字节对齐,32 位只能按 4 字节及以下任意字节对齐。
#include <stdio.h>
#pragma pack(4)
struct Test
{
char c;
long long i64;
};
#pragma pack()
#pragma pack(8)
struct Test2
{
char c;
long long i64;
};
#pragma pack()
int main(int argc, char* argv[])
{
printf("%zu\n", sizeof(struct Test));
printf("%zu\n", sizeof(struct Test2));
return 0;
}
这个程序在 64 和 32 Linux 下输出是不同的,32 位下不能按 8 字节对齐。