sizeof问题 求解
typedef struct MEM
{
int q1;
char q2;
char q3;
}mem;
int main(int argc, char *argv[])
{
unsigned char b;
mem m;
b = sizeof(m);
printf("b = %d\n", b);
return 0;
}
为什么输出b的值是8呢? 不应该是12吗?
而下面程序输出的b值为12, 为什么这次b值不为8了呢?
typedef struct MEM
{
char q3;
int q1;
char q2;
}mem;
int main(int argc, char *argv[])
{
unsigned char b;
mem m;
b = sizeof(m);
printf("b = %d\n", b);
return 0;
}
[解决办法]
字节对齐,32位系统,通常为4个字节。
int q1; // 4个字节
char q2; // 1个字节
char q3; // 1个字节
填充 //填充2字节
总共8
char q3; //1个字节 不够4个字节
填充 //填充3个字节
int q1; //4个字节
char q2; //1个字节 不够4个字节
填充 //填充3个字节
总共12
[解决办法]
看这个:
三谈内存对齐问题