这个是不一定的,和语言实现(编译环境)有关。在PC上,由于x86指令普遍对4为倍数的地址的操作效率比较高,因此结构体/类对象在大多数编译器的默认情况下会被按以4为倍数的地址对齐,若大小不符合要求,会在后面补padding使之为4的倍数。因此sizeof(AA)是4。LZ可以看看其它情况,例如只有一个char和一个int成员的结构体的sizeof,是不是8?
这个特性通常可以用编译器相关的编译选项或预处理指令进行设置。例如MSVC下可以使用预处理命令#pragma pack定制最小大小,使之不是4的倍数。
====
[原创回答团]
“int”类型占2个字节。
结构体数据新类型AA 里有2个int 类型 变量b1,b2 .
所以 占四个字节
虽然你AA里加在一起只是7位,但是你定义位结构的基础是在int类型上,所以,即便是7位,最后也会对齐到int的,也就是4个字节啦
字节对齐的问题
内存数据的对齐方式,即是说内存分配的基本单位就是四个字节