[讨论]关于结构体字节对齐问题,高手们进来探讨一下
struct test{ int m1;char m2;float m3;
union uu{char u[5];int u2[2];}ua;
}myaa;
运行sizeof(struct test),在TC中的运行结果是12,在VC++中的运行结果是20,网上有人说VC++是4字节对齐,所以就是4+1+3(空字节)+4+8=20。
但是本人在百度百科中查了下字节对齐的内容:
实字节对齐的细节和具体编译器实现相关,但一般而言,满足三个准则:
1) 结构体变量的首地址能够被其最宽基本类型成员的大小所整除;
2) 结构体每个成员相对于结构体首地址的偏移量都是成员大小的整数倍,如有需要编译器会在成员之间加上填充字节;例如上面第二个结构体变量的地址空间。
3) 结构体的总大小为结构体最宽基本类型成员大小的整数倍,如有需要编译器会在最末一个成员之后加上填充字节。例如上面第一个结构体变量。
从以上例子看,VC++明显不满足二三条件,求高手解释一下。
还有TC中为什么字节数是成员所占字节数简单相加呢,求解答,是否TC字节对齐数是1啊,或是不进行字节对齐的