计算结构体的大小

计算结构体大小:
要想计算结构体的大小,就要理解结构体中的内存对齐问题,内存对齐是为了提高计算机的运行的速度,这个是有硬件决定的。
内存对齐:各种数据存放的地址要能够整除该数据本身的字节数。
例如:

在这里插入图片描述
在图一中:
aa[0]中的整型变量a占4个字节可以被首地址整除,字符型变量b占一个字节可以被任意的地址整除;但是在arr[1]中变量a的地址不能够整除a的字节数,在这里就要用到内存对齐的方式。char可以存放在任意的地址,short存放在能被2整除的地址,int存放在能够被4整除的地址。
在图二中:为了内存对齐,在aa[0]中的变量b之后有3个空格,再储存arr[1]。
计算结构体大小的规律总结:
(1)先将每个成员的字节数写出,然后从第二个成员开始,将前面成员的总字节数补齐成当前字节数的倍数。
(2)结构体的总大小,一定要能够整除单个成员最大类型的大小。
例题:(1)struct A
{ char a;//1+3(补成4的倍数)
int b;//4};//这个结构体的大小为:8个字节
(2)struct B
{ char a;//1+1(补齐是2的倍数)
short b;//2int c;//4};//这个结构体的大小为:8个字节
(3)struct D
{
char a;//1+3(补齐是4的倍数)
int b;//4short d;//2 };//这个结构体的大小为:12个字节(这个容易计算成10个字节,但是由这个规律来计算是12个字节) 结构体的总大小,一定要能够整除单个成员最大类型的大小。
(4)struct E
{
char a;//1+3(补齐是4的倍数)
int b;//4int c;//4float e;//4double d;//8};//这个结构体的大小为:24个字节
(5)struct F
{
short b;//2
char a;//1+1(补齐是下个4的倍数)
float *c;//4
int d;//4+4(补齐是下个8的倍数)
double e;//8 long long f;//8};//32
(6)struct G
{
int a;//4
char b;//1};//8(5+3)结构体的总大小,一定要能够整除单个成员最大类型的大小。
(7)struct I
{
short a;//2+6
double b;//8};//16结构体的总大小,一定要能够整除单个成员最大类型的大小。
(8 struct Y
{ char a;//1
struct //没有类型名,也没有变量名,则生成一个透明的变量
{ int b;//4
float c;//4 };};//12
以上就是结构体大小计算的总结了!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值