C语言 如何计算结构体的大小

sizeof(char)   = 1
sizeof(short)  = 2
sizeof(int)    = 4
sizeof(long)   = 4
sizeof(float)  = 4
sizeof(double) = 8
struct stu
{
    short   c;
    char   b;
    int   b;
}aa;//大小为8

计算方法

1.字节对齐原则

用结构体里面最大的数据类型的大小和 4 进行比较,按照字节数小的为单位开辟空间

2.节省空间原则,减少空间浪费

32位和64位结构体大小不同

以32位为例:与4比较

struct stu
{
    short  c; //short大小为2,与4字节比较小于4
    char  b;  //char大小为1,与4字节比较小于4,与short一共3字节,共用4字节。
    int  b;   //int大小为4,等于4,占用4字节
    double  a; //double大小为8,大于4,开辟两个4字节空间
}aa; //大小为16

64位与8比较:

struct stu
{
    short  c; //short大小为2,与8字节比较小于8,
    char  b;  //char大小为1,与8字节比较小于8,与short一共3字节,共用开辟的8字节。
    double  a; //double大小为8,等于8,开辟8字节空间
    int  b;   //int大小为4,小于8,开辟8字节
}aa; //大小为24

注意:

如果第一个用不完开辟的地址,需要判断下一个的大小能够占满剩余的空间吗,如果可以占满就共用开辟的地址;如果还有剩余继续看下一个,如果放不开就前两个共用,再重新开辟地址存放。如果大于比较的地址就再开辟地址存放,如32位double需要开辟两个4字节地址。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值