C的结构体大小
结构体在C语言中有着重要的作用,这篇博客就是利用几个例子来探讨结构体的大小的。
研究结构体的大小,我们就要首先清楚各种数据类型的字节大小。
1. a是int整型数据,b是float浮点型数据。
struct A的字节大小是8。
从以下例子开始就要有内存对齐的要求了。
2.a是char型数据,b是int型数据。
在编译器处理时,对char类型数据进行内存分配时,要对其分配与下一数据地址成倍数的字节,所以struct B的字节大小是8。
3.a是char型数据,b是short型数据,c是int型数据。
这一个例子和上一个一样,char加一个字节地址是short字节地址的倍数,sizeof(char)+1+sizeof(short)是int字节地址的倍数,所以struct C的字节大小是8。
4.a是char型数据,b是int型数据,c是short型数据。
这一例子一样的做法,但是这种情况的字节大小确是12。因为假设下一数据存放在地址为110的格子里,int型数据则放在114处,下一次又会放在不可预测的地方,显然 有错误,所以在字节分配时就应该补齐两个格子,从112开始,所以这个结构体占12个字节。
5.a是char型数据,b是float型数据,c是int型数据,d是double型数据。
由以上例子可知struct E的大小是24。
6.a是int型数据,b是char型数据。
此类例子表明与数据定义顺序有关,结构体大小可参照4,2得8,8字节大小。
7.a是char型数据,b是int型数据,c是double型数据,d是整型指针数据。
这一例子以指针为4字节可得该结构体为24字节。
8.两个结构体嵌套
struct II的字节类型为8,在struct I中struct II不与其有影响,为单个最大类型,所以struct I的字节大小为12。
最后输出结果: