C语言结构体大小问题,求指点
如题,在某处看到某人提问,还没人为他解答,经过测试,结果有点奇怪,在这里求指点。
#include <stdio.h>void main(){ struct m { char a[10]; char b[10]; int aa; int bb; }; printf("\n%d",sizeof(struct m)); struct m2 { char a[10]; int aa; int bb; char b[10]; }; printf("\n%d",sizeof(struct m2)); //为什么这个等于32,不等于28??难道是我的编译器问题??} struct m2 { char a[10]; // 0~9 int aa; // 12~15 int bb; // 16~19 char b[10]; // 20~29 };
[解决办法]
m2的对齐数是4bytes,所以,结构体的大小须为4的倍数
struct m2 { char a[10]; // 0~9,这里会补2bytes,0 ~ 11 int aa; // 12~15 int bb; // 16~19 char b[10]; // 20~29,这里会补2bytes, 20 ~ 31 };
[解决办法]
如果像下面那样,sizeof(m2)就是28了
struct m2{ int aa; // 0 ~ 3 int bb; // 4 ~ 8 char a[10]; // 9 ~ 18 char b[10]; // 19 ~ 27};
[解决办法]
计算机的字节对齐机制
[解决办法]
学习了。。。
[解决办法]
m2的对齐数难道不是10吗,为什么是4?
[解决办法]
10那个是数组,它的类型是char,只有1字节尺寸。