这个不能怪Keil,是C标准规定了位域是2字节对齐的……也就是说就算你只定义了1bit的位域,它也要占用2字节,其它的15bit就这么空着……不信试一下以下代码:
typedef struct
{
unsigned b0:1;
unsigned b1:1;
unsigned b2:1;
unsigned b3:1;
unsigned b4:1;
unsigned b5:1;
unsigned b6:1;
unsigned b7:1;
}oneBitStructs;
typedef union
{
oneBitStructs oneBit;
// unsigned char allBits;
}myFlag;
myFlag flag;
void main(void)
{
int size = sizeof(myFlag);
size = sizeof(oneBitStructs);
while(1)
;
}
优化级别设为0
单步调试过程可以看到myFlag这个联合体占用了2字节,结构体oneBitStructs也是一样 |