内存对齐: 结构体和位段大小的计算
内存对齐出现的背景: 现代CPU会以双字节,四字节,八字节...偶数倍的字节大小存取内存块.如果一个数据没有对齐,则会导致CPU多次存取内存的现象,影响系统效率。
内存对齐: 将数据以内存对齐规律存放,提高CPU的存取效率。
结构体大小:
1.第一个成员从偏移量为0的地址开始
2.其他成员大小:
其他成员变量要对齐到对齐数的整数倍的地址处。
对齐数=min ( 该成员大小,默认对齐数 )。 VS中默认的值是8,(32位cpu)Linux中的默认值是4。
3.结构体的总大小:
是最大对齐数的整数倍
4.如果嵌套了结构体:
嵌套的结构体要对齐到自己最大对齐数的整数倍处,结构体的整体大小就是所有最大对齐数(含嵌套结构体的对齐数)的整数倍。
位段大小:
1.位段每次都会分配位段的类型大小的内存块
2.位段每次从右向左分配
3.如果放不完,则开辟新的空间
4. struct s{
char a:1;
char : 0;
char b;
};
无名位域 :0 会强迫下一个位域内存对齐 ; a:1 表示a占的1个bit大小 ; b表示默认占一个字节的内存