一、union
我们知道,union大小是其中元素占内存最大的数据成员大小,当一个成员被赋值后,所有其他成员均失效,如下union体
typedef union {
long i;
int k[5];
char c;
int *x[5];
} DATE;
猜猜 sizeof(DATE)是多大呢?
其实在不同平台下,结果不一样。
32位:结果为20
64位:结果为40
因为指针在两个平台下大小不一样,而 union 中有指针数组 x
二、结构体对齐
如下没有特别说明,均假设为64位平台
typedef struct data {
int cat;
DATE cow;
double dog;
} TOO;
则 sizeof(TOO)大小为56 (40 + 8 +1,按照8个字节对齐,则为40 + 16 = 56)
typedef struct data {
int cat;
DATE cow;
// double dog;
} TOO;
sizeof(TOO) 为48
typedef struct data {
char c;
// int cat;
DATE cow;
// double dog;
} TOO;
sizeof(TOO) 为48