首先就是解释为什么要这么处理:处理器在处理已经对齐的变量时只需要一次就能够读取,而没对齐时可能就需要将该变量读取两次,(既4个字节,读了前三个字节,还剩一个字节就需要再读取一次)
接着说一下对齐的规则:
1.第一个直接放在偏移量为0的地方,不管是什么类型的变量
2.从第二个开始每一个存放时都要放在偏移量为(默认值与字节数较小值)的整数倍处
3.最后得出来的那个值要是(几个变量字节最大的那个)的整数倍处
eg:
char
char
int
(vs默认是8)也可以用#pragma pack()进行修改
0char
1char
2
3
4int
5int
6int
7int
0~7加起来刚好8个是4的整数倍,所以不需要额外扩展一个空间
当使用sizeof那个这个结构体时出来的答案就是8
这个对齐主要是用空间去换取时间
为了减小损耗一般在没有固定要求的情况下把小字节的变量放前面进行定义
位段
char s:5; 1
char s2:1;
char s1:4; 1
int a:6;1
变量后的数字是以bit为单位的
新建变量还是符合对齐的
能节省空间,但是垮不了平台
//这里是无关的,仅是个人记录一下笔记
结构体传参数时尽量传地址,当整个结构体传入函数时会产生大量的堆栈