#include<stdio.h>
#pragma pack(2)
union u
{
char buf[9];
int i;
};
int main()
{
printf("sizeof(u) :%u\n", sizeof(union u));
return 0;
}
在Ubuntu 16.04.2 LTS编译运行的结果是
sizeof(u) :10
代码中#pragma pack(2)将对齐设置为2,所以int得对齐方式也变成了2,整个u的对齐也是2,所以此时sizeof(u)=10。
#include <stdio.h>
#pragma pack(1)
typedef struct x{
char c:8;
short s;
long long l:40;
}Test;
#pragma pack(pop)
int main()
{
printf("sizeof(Test) :%u\n", sizeof(Test));
return 0;
}
xx@xx-PC:~/test$ ./struct_test
sizeof(Test) :8