#pragma pack(n)
当n大于结构体中内存占用最大的变量内存时,将按照最大内存变量的字节占用数进行对齐,否则,就根据n进行对齐
情况一:
例一:
#pragma pack(4)
struct node{
int a;
char b;
char c;
};
struct node n;
printf("%d\n",sizeof(n));
结果:测试结果为6
例二:
#pragma pack(4)
struct node{
int a;
char b;
int c;
};
struct node n;
printf("%d\n",sizeof(n));
结果:测试结果为12
总结:例一中,a占4字节,b占1字节,由于b和c之和不满4字节,所以b和c共占用4个字节对齐。
例二中,a,b均一样,但是由于c占4字节,必须重新开辟4字节进行对齐,所以最终为12字节。
情况二:
#pragma pack(5)
struct node{
long a;
char b;
char c;
};
struct node n;
printf("%d\n",sizeof(n));
根据测试,最终结果为8,可见,是根于变量n的字节占用数进行对齐的。