结构体字节对齐与位域
code advance_struct .c
#include<sdtio.h>
struct person{
int number;
//4个
char sex;
//1个,空三个
double money;
//8个
};
int main(){
//结构体内存
printf("%lu\n",sizeof(struct Person));
return 0;
}
1.结构体所占的内存大小
1.本身的成员变量类型
2.结构体存在字节对齐
结构体内部最大的单成员类型的整数倍
如果下一个成员无法在有限的空间存放则需要一个额外的空间存放
3.如何优化字节对齐
1.按照有限空间合理排布成员顺序
2.更改字节对齐方式
字节按照1字节对亲 无额外的空间方式 直接等于所有成员的字节相加
#pragma pack(1)
1,2,4,8,16字节对齐方式可选值 其实就是基础类型字节大小
2.位域的概念 还是优化结构体占内存的方式
针对整数类型的成员变量,可以通过位域指定其所占内存位的多少
无法超过其本身的位数
如char不能超过8位
在成员变量后加冒号:加指定多少位
注:一个字节8个位
int number:1;
char sex:1;
double money;