结构体详解
结构体在内存中的存放
结构体内存对齐
结构体内存对齐
对齐规则:
1.第一个成员变量从0开始
2.之后的成员变量需对齐某个对齐数的整数倍(对齐数是默认对齐数和该成员大小的较小值)
3.结构体的总大小为每一个成员变量的对齐数中的最大值的整数倍
4.若遇到嵌套了结构体,嵌套的结构体对齐到自己的最大对齐数的整数倍,结构体的整体大小就是所有成员中最大对齐数的整数倍
struct S
{
char a;
char b;
int c;
};
int main()
{
printf("%zd\n", sizeof(struct S));
return 0;
}
结果为8
修改默认参数
#pragma pack(1)
struct S
{
char a;
char b;
int c;
};
//#pragma pack() 可取消修改的默认对齐数
int main()
{
printf("%d\n",sizeof(struct S));
return 0;
}
位段
位段的成员可以是int,signed int,unsigned int,char类型
例如:
struct A
{
int _a:2;
int _b:5;
int _c:10;
int _d:30;
};
位段是不跨平台的
//举个例子,看看怎么开辟空间的
struct S
{
char a:3;//代表二进制位
char b:4;
char c:5;
char d:4;
};
struct S s = {0};
s.a = 10;
s.b = 12;
s.c = 3;
s.d = 4;