结构体长度计算

本文介绍了C语言中结构体成员和整体的内存对齐规则。1) 结构体成员的相对地址必须是其类型长度的整数倍,如`struct tmp`中的成员对齐方式;2) 整个结构体的长度必须是最大成员类型长度的整数倍,以确保内存高效利用;3) 内嵌结构体也遵循此规则,如`struct py`的例子所示。

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

3句话总结

类型对齐都是采用用和int类型一样长度来对其,也就是32位系统或是64位系统这样的值。

1、结构体中成员的相对地址,一定要是元素本身类型长度的整数倍

例: 

struct  tmp

{

char a;

char b;

float c;

        char d;

        doble e;

char f;

}

变量名 类型长度 相对地址

a 1 0

b 1 1   ------后面补齐2个字节

c 4 4    -----相对地址必须是本身类型的整数倍

d 1 8   -----后面必须补齐7个字节

e 8 16 -------相对地址必须是本身类型的整数倍,由于地址8已经有值,所以必须到16的地址,前面必须补齐7字节

f 1 24


2、整个结构体的长度,必须是类型最大成员的长度整数倍

比如上面例子中整个结构体的长度应该是32。是doble的整数倍。

而不是24 + 1, 不是 8 的整数倍。


3、无论结构体中是否有内嵌结构体都是按所有结构体中基本类型最大的对齐

struct temp

{

int temp_a;

char temp_b;

}


struct py

{

char a;

sturct temp b;

double c;

}

变量名 类型长度 相对地址

a 1 0

b->temp_a 4 4   ------因为地址必须是类型长度的整数倍,所以前面要补齐3字节

b->temp_a 1 8

c 8 16    -------相对地址必须是本身类型的整数倍,由于地址8已经有值,所以必须到16的地址,前面必须补齐7字节



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值