结构体字节对齐

本文探讨了结构体字节对齐的概念,解释了为何结构体变量的大小并非简单相加,而是根据成员中最大数据类型的字节数进行对齐。通过实例解析了对齐规则,强调了成员顺序对结构体内存占用的影响,并提醒程序员在声明结构体时注意内存效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

struct STUDENT
{
	char a;
	int b;
}data;

如上结构体变量data占多少字节?char占1个字节,int占4个字节,所以总共占 5 个字节。

#include<stdio.h>
struct STUDENT
{
	char a;
	int b;
}data;
int main(void)
{
	printf("%p, %p \n", &data.a, &data.b);
	printf("%d\n", sizeof(data));
	return 0;
}

在这里插入图片描述
我们看到data不是占5个字节,而是8个字节。变量a的地址是从0x5579dc10f018到0x5579dc10f01b,占4个字节,变量b的地址从0x5579dc10f01c 到0x5579dc10f01f,占4个自己,但是 a 的类型是 char 类型,不是占 1 个字节?是的还是占1个字节,只不过是结构体中有一个字节对齐的概念。

什么叫做字节对齐呢?

我们知道结构体是一种构造数据类型,里面可以有不同数据类型的成员。在这些成员中,不同的数据类型所占用的内存空间是不同的。那么系统是怎么给结构体变量的成员分配内存的呢?

就是按照字节对齐的方式存储的,即以结构体成员中占用内存最多的数据类型所占用的字节数为标

博客
v8worker
05-08 2959
05-06 2942
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值