C结构体内存对齐

本文探讨了C语言结构体内存对齐的原理,解释了为何结构体内的元素并非连续存储,而是遵循特定的内存对齐规则。通过实例展示了不同元素排列顺序如何影响结构体的大小,并提出了在声明结构体时应考虑的内存优化策略,即尽量将短类型放在前面,长类型置于后面。
摘要由CSDN通过智能技术生成
struct mystc
{
	char a;
	int b;
	short c;
}

这样的一个结构体多大?反正不是1+4+2字节。

在内存中,结构体内的元素分布不是紧挨着依次排布的,而是存在着“内存对齐
因为硬件原因,读取内存要按照一定的偏移量来存储,那么存储数据也相应按照一定的偏移量存储,也就是相应元素类型的长度。
所以在内存中,每个元素都“以为”内存中“全是自己”,所以元素的存储地址值一定是自身长度的整数倍

所以在内存中,结构体mystr差不多长这样:
在这里插入图片描述

为什么最后还要占有两个空字节?
因为要为接下来的内存分配考虑,接下来的元素也需要对齐啊。
总结下来结构体内存分配的规律:

  • 每个元素地址需是自身类型长度的整数倍
  • 结构体本身所占内存大小需是结构体中最长类型长度的整数倍

并且,如果将上面的结构体元素重新排列下,例如这样:

struct mystr
{
	char a;
	short c;
	int b;
}

这样,算一算结构体变得多大?
对,变成了8个字节,少了两个字节啊!!
所以在声明结构体时,尽量注意:
将较短类型放在前边,较长类型置后

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值