C的结构体大小

结构体在C语言中有着重要的作用,这篇博客就是利用几个例子来探讨结构体的大小的。

研究结构体的大小,我们就要首先清楚各种数据类型的字节大小。

C的结构体大小

1. a是int整型数据,b是float浮点型数据。

C的结构体大小C的结构体大小

  struct A的字节大小是8

从以下例子开始就要有内存对齐的要求了。

2.a是char型数据,b是int型数据。

C的结构体大小C的结构体大小

在编译器处理时,对char类型数据进行内存分配时,要对其分配与下一数据地址成倍数的字节,所以struct B的字节大小是8

3.a是char型数据,b是short型数据,c是int型数据。

C的结构体大小C的结构体大小

这一个例子和上一个一样,char加一个字节地址是short字节地址的倍数,sizeof(char)+1+sizeof(short)是int字节地址的倍数,所以struct C的字节大小是8

4.a是char型数据,b是int型数据,c是short型数据。

C的结构体大小C的结构体大小

这一例子一样的做法,但是这种情况的字节大小确是12。因为假设下一数据存放在地址为110的格子里,int型数据则放在114处,下一次又会放在不可预测的地方,显然 有错误,所以在字节分配时就应该补齐两个格子,从112开始,所以这个结构体占12个字节。

5.a是char型数据,b是float型数据,c是int型数据,d是double型数据。

C的结构体大小C的结构体大小

由以上例子可知struct E的大小是24。 

6.a是int型数据,b是char型数据。

C的结构体大小C的结构体大小

此类例子表明与数据定义顺序有关,结构体大小可参照4,2得8,8字节大小。

7.a是char型数据,b是int型数据,c是double型数据,d是整型指针数据。

C的结构体大小

C的结构体大小

这一例子以指针为4字节可得该结构体为24字节。

8.两个结构体嵌套

C的结构体大小

struct II的字节类型为8,在struct I中struct II不与其有影响,为单个最大类型,所以struct I的字节大小为12

最后输出结果:

C的结构体大小C的结构体大小