C++中数据对齐问题:struct、union、enum。再谈sizeof()2014-11-11首先是struct,在C++中,结构体其实和class有很大的相似了。但是有一点不同的是,struct默认是public,而class中是private.当然,struct继承等用法也是可以的。共用体的声明方式是:

枚举的声明方式与共用体比较相似

其中a初始化为0,后面默认增1,若已经初始化,则后面再增1,比如d=6在这里。
struct长度计算
大家猜一下,s1 x;int b=sizeof(x);他的结果会是多少呢?有人会觉得应该是1+8+4+1=14.

实际上是24.为什么会是这样呢?这个和结构体的对齐方式有很大关系。总之有两条1、整体空间是最大成员占用字节的整数倍,比如这里最大字节占用的是double,他为8,那肯定是8,16,24...2、内存按照结构体中的数据成员先后排序,并且当前地址应该是以当前成员所占用空间的整数倍。比如在这里double b占用的是8个字节,那么以摆字节就应该是8,16,24.而char a,只有一个字节,则前面空间自动补齐。按照上面两点的规则,我们不难得出8+8+4+1,但是应该是8的整数倍,所以是24.这里有必要补充一下:
在Linux+gcc环境下,若最大成员是4,则整体空间只需是4的倍数即可。所以这里只需要是4的倍数,4,8,12,16,20,24..
第二点,在Linux+gcc环境下,若某成员类型所占字节数超过4,那前面已摆放空间只需要是4的倍数即可。这里double b;前面只需补齐4个即可,而不需补齐8个。
故会出现整体空间是20的情况。4+8+4+1=17.但是应该是4的倍数,则为20.