对struct 嵌套 struct 求 sizeof 存在的一些误解
记录.分享
有以下两个结构体,example1
和example2
,定义如下:
typedef struct
{
short a;
long b;
}example1;
typedef struct
{
char c;
example1 struct1;
short d;
}example2;
求两个结构体的大小(即计算其 sizeof
的值):
printf("sizeof(example1) = %d \n", sizeof(example1));
printf("sizeof(example2) = %d \n", sizeof(example2));
面对这个问题的时候,对于example1
没啥好说的:
short
占2个字节
long
占4个字节
最大类型长度为4字节,所以4字节对其
于是对example1
求值应该是8
而对于example2
我原来的认识是:
char
占1字节
struct example
1 占8字节
short d
占2字节
example2
中最大类型长度为8,故对example2求值应该是24.
用编译器跑了一下结果显示为:
sizeof(example1) = 8
sizeof(example2) = 16
而 不 是 我 想 象 中 的 24
本着编译器不会出错的原则,我陷入了沉思。。。
答案为16的解释:
example2
中包含char
,example1
和short
类型,其中简单数据类型最大类型长度short
为2
example2
中还包含的example1
复合类型,example1
复合类型中简单数据类型最大长度为4
综上,example2
中最大类型应该按照4
字节计算:char c
占用一个字节,其后补充三个字节
对齐,再次是example1
的8
个字节,最后是short d
占用2
个字节,补充2
字节对齐。总共16
字节。