C语言——结构体的大小

本文详细介绍了C语言中结构体的大小计算原则,即内存对齐,旨在提高CPU的内存访问效率。通过具体实现、图解和例题说明,解释了如何确定结构体成员存放地址及结构体整体大小。最后,建议在定义结构体时考虑内存布局以减小结构体大小。

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

结构体的大小:

  • 计算结构体大小的原则:内存对齐

  • 为什么结构体的大小要遵循内存对齐的原则:
    经过内存对齐后,CPU的内存访问速度大大提升,比如如果cpu一次读取内存为4个字节,如果从0地址开始就一次读取就够了,如果你从1地址开始,那么要读2次。所以对齐后,cpu读取内存效率提高。

  • 内存对齐:结构体成员存放的地址要能整除结构成员内存的大小。

  • 具体实现:
    1.前面所有成员的大小相加应该是当前成员大小的倍数
    2.整个结构体的大小应该能是该结构体中单个最大成员大小的倍数

  • 图解:
    在这里插入图片描述

  • 计算结构体大小的例题:

struct A
{
char a;//1+1
short b;//2
int c;//4
}; // 该结构体大小为 8 bytes

struct B
{
int a;//4
char b;//1+1
short c;//2
};// 该结构体大小为 8 bytes

struct C
{
int a;//4+4
double b;//8
float *c;//4
};//该结构体大小为 24 bytes

struct D
{
int a;//4
float *b;//4
double c;//8
};//该结构体大小为 16 bytes

struct E
{
char a;//1+3
struct EE
{
int b;
long c;
}d;//8
};//该结构体大小为 12 bytes

struct F
{
char a;//1
struct FF
{
int b;
long c;
};//没有定义变量
} //该结构体大小为 1 bytes

struct G
{
char a;//1+1
short b[4];//8
int c;//4
};//该结构体大小为 16 bytes

  • 结语:
    定义结构体时,应将内存大数据类型放后面,小的放前面,这样会使得结构体的大小变得最小。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值