结构体的大小

 

1、占位符

 

 

当结构体内容为空时,仍然会有一个字节的大小,如下:

int main()
{
	//占位符
	typedef struct
	{}A;

	A a;
	printf("%d\n",sizeof(a));

	return 0;
}

 

2、对齐

 

 

  •  将结构体中占字节最多的类型的字节数作为对齐数
  •  结构体成员申请内存时,每一次分配对齐数大小的字节,当不够的时候才进行下一次分配
  •  结构体按顺序分配内存
  •  结构体大小是对齐数的整数倍

分析如下代码

typedef struct
	{
		int a;
		char b;
		short c;
	}B;

	B b;
	printf("%d\n",sizeof(b));

 

结构体B中,int占字节数最大,因此将int所占的字节数4作为对齐数

 

 

首先,为a申请内存,一次分配4个大小的内存,a刚好用完

 

 

然后,为b申请内存,上一次分配的内存已经用完,因此继续分配4个大小内存,b使用一个,还剩三个

 

 

最后,为c申请内存,上一次分配的内存还剩三个,c只需要两个,因此不用继续申请,使用上次剩下的,分配完还剩一个

所以,共分配了两次,每次分配4个大小内存,结构体B占8个大小内存

分析如下代码

typedef struct
	{
		char a;
		short b;
		short c;
		char* d;
	}C;

	C c;
	printf("%d\n",sizeof(c));

 

 

 

 

结构体C中 char* 类型占字节数最多,因此将4作为对齐数

 

 

 

 

首先,为a申请内存,分配4个大小内存,a使用1个,还剩3个

 

 

然后,为b申请内训,b需要2个,还剩3个,够用,不需要重新分配,b使用完还剩1个

 

 

继续,为c申请内存,c需要2个,只剩下一个,不够用,因此重新分配4个,c使用2个,还剩2个

最后,为d申请内存,d需要4个,只剩下2个,不够用,因此重新分配4个,d使用4个,剩下0个

所以共分配了三次,每次分配4个,结构体C占12个大小内存.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值