一:通过#pragma pack(n)改变C编译器的字节对齐方式,在C语言中,结构是一种复合数据类型,其构成元素既可以是基本数据类型(如int、long、float等) 的变量,也可以是一些复合数据类型(如数组、结构、联合等)的数据单元。在结构中,编译器为结构的每个成员按其自然对界(alignment)条件分配空 间。
struct mystruct1{
char a;
int b;
short c;
long d;
};
#pragma pack(2)
struct mystruct2{
char a;
int b;
short c;
long d;
};
#pragma pack(1)
struct mystruct3{
char a;
int b;
short c;
long d;
};
#pragma pack()
struct mystruct4{
char a;
int b;
short c;
long d;
};
int _tmain(int argc, _TCHAR* argv[])
{
int a_len;
int b_len;
int c_len;
int d_len;
struct mystruct1 s1;
struct mystruct2 s2;
struct mystruct3 s3;
struct mystruct4 s4;
printf("sizeof(char)=%d sizeof(int)=%d sizeof(short)=%d sizeof(long)=%d/n",sizeof(char), sizeof(int), sizeof(short), sizeof(long));
/*mystruct1*/
a_len = (char*)&(s1.b) - (char*)&(s1.a);
b_len = (char*)&(s1.c) - (char*)&(s1.b);
c_len = (char*)&(s1.d) - (char*)&(s1.c);
d_len = sizeof(mystruct1) - (a_len + b_len + c_len);
printf("sizeof(a)=%d sizeof(b)=%d sizeof(c)=%d sizeof(d)=%d/n",a_len,b_len,c_len,d_len);
/*mystruct2*/
a_len = (char*)&(s2.b) - (char*)&(s2.a);
b_len = (char*)&(s2.c) - (char*)&(s2.b);
c_len = (char*)&(s2.d) - (char*)&(s2.c);
d_len = sizeof(mystruct2) - (a_len + b_len + c_len);
printf("sizeof(a)=%d sizeof(b)=%d sizeof(c)=%d sizeof(d)=%d/n",a_len,b_len,c_len,d_len);
/*mystruct3*/
a_len = (char*)&(s3.b) - (char*)&(s3.a);
b_len = (char*)&(s3.c) - (char*)&(s3.b);
c_len = (char*)&(s3.d) - (char*)&(s3.c);
d_len = sizeof(mystruct3) - (a_len + b_len + c_len);
printf("sizeof(a)=%d sizeof(b)=%d sizeof(c)=%d sizeof(d)=%d/n",a_len,b_len,c_len,d_len);
/*mystruct4*/
a_len = (char*)&(s4.b) - (char*)&(s4.a);
b_len = (char*)&(s4.c) - (char*)&(s4.b);
c_len = (char*)&(s4.d) - (char*)&(s4.c);
d_len = sizeof(mystruct4) - (a_len + b_len + c_len);
printf("sizeof(a)=%d sizeof(b)=%d sizeof(c)=%d sizeof(d)=%d/n",a_len,b_len,c_len,d_len);
return 0;
}
输出:
sizeof(char)=1 sizeof(int)=4 sizeof(short)=2 sizeof(long)=4
sizeof(a)=4 sizeof(b)=4 sizeof(c)=4 sizeof(c)=4
sizeof(a)=2 sizeof(b)=4 sizeof(c)=2 sizeof(c)=4
sizeof(a)=1 sizeof(b)=4 sizeof(c)=2 sizeof(c)=4
sizeof(a)=4 sizeof(b)=4 sizeof(c)=4 sizeof(c)=4
字节对齐
最新推荐文章于 2022-02-25 21:57:21 发布