结构体的内存大小怎么算

前言:

想通俗的讲解一下结构体的内存怎么计算,所以再次写了一篇这样的文章,想将这个知识点描述得更加容易理解

正文:

首先我们要知道结构体内存计算与编译器的默认对齐数有关,一般windows环境默认对齐数为8,linux默认对齐数为4

1.结构体内存对齐的基准取内存最大的变量的字节数与默认对齐数的较小值。
2.结构体的总内存必须是内存最大的变量的整数倍数。
例:在linux环境下,默认对齐数为4

struct A
{
   char a;
   int i;
   char b;
};

分析:默认对齐数为4,而结构体中内存最大的为int类型,为4个字节,所以对齐的基准为4,并且结构体的内存必须是4的倍数。

放下一个变量a后,使用了一个字节,因为基准是4,还剩下三个字节放不下i了,所以要浪费3个字节,在浪费的3个字节后放入i

然后放入b,现在总字节数为1+3+4+1=9,因为总字节数要为4的倍数所以最终大小为12.

3.其他成员变量要对齐到某个数组(对齐数)的整数倍的地址处

这句话怎么理解呢

一个例子哈

struct A

{

int i;

char c;

short s;

}

由上面的知识很容易我们知道A内存大小为8

但是内部成员怎么分布呢

不是这样的


而是这样的


其他成员变量要对齐到某个数组(对齐数)的整数倍的地址处


未完。。。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值