结构体字节对齐 c语言结构体字节对齐详解

首先我们来看一个结构体
例题1

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

如上结构体占多少个字节呢?
思考:char占一个字节,int占四个字节,所以总共占5个字节吗?
其实不是。这就牵扯到结构体中字节对齐的概念。
(什么叫字节对齐?结构体是一种构造数据类型,里面可以有不同的数据类型的成员,在这些数据成员中,不同的数据类型所占的内存空间是不同的,那么这些成员是怎么存储的呢?其实就是按字节对齐方式存储的,即以结构体成员中占内存最多的数据类型所占的字节数为标准,所有的成员在分配内存时,都要与这个长度对齐)
正如上面这个例子:char占一个字节,int占四个字节,与4字节的长度对齐,也就是说,虽然char是一个字节,但是为了与4字节的长度对齐,所以其后面的3字节都会空着(但空并不是什么都没有就同定义了一个变量没有初始化一样)。
在这里插入图片描述
所以data不是占5个字节,而是占8个字节。
又如三个成员对齐:
例题2:

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

在这里插入图片描述
cha

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值