关于C语言中结构体内存的计算

文章讲述了C++中结构体的内存对齐规则,包括第一个成员的定位、对齐数的确定以及结构体总大小的计算原则。内存对齐是为了优化计算效率,有时会牺牲空间来换取时间。文章提供了几个计算结构体大小的例子,如不同成员顺序的S1和S2结构体,以及包含嵌套结构体的S4,展示了解题思路。

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

一.结构体内存对齐

(一)首先得掌握结构体的对齐规则

1.第一个成员在与结构体变量偏移量为0的地址处。
2.其他成员变量要对齐到某个数字(对齐数)的整数倍的地址处。
3.对齐数 = 编译器默认的一个对齐数 与 该成员大小的较小值。在VS中默认的值为8
4.结构体总大小为最大对齐数(每个成员变量都有一个对齐数)的整数倍。
5.如果嵌套了结构体的情况,嵌套的结构体对齐到自己的最大对齐数的整数倍处,结构体的整
体大小就是所有最大对齐数(含嵌套结构体的对齐数)的整数倍。

(二)结构体内存对齐的作用

结构体的内存对齐是拿空间来换取时间的做法,以消耗较多的空间来减少运算的时间,从而提高计算效率,因此在设计结构体的时候,我们既要满足对齐,又要节省空间,即为将占用空间小的成员尽量集中在一起。

二.结构体内存的计算

1.训练一

struct S1
{
	char c1;
	int i;
	char c2;
};
int main()
{
	printf("%d\n", sizeof(struct S1));
}

运算结果:
在这里插入图片描述

2.训练二

struct S2
{
	char c1;
	char c2;
	int i;
};
int main()
{
	printf("%d\n", sizeof(struct S2));
}

运算结果:
在这里插入图片描述

3.常见的结构体内存计算

struct S3
{
	double d;
	char c;
	int i;
};
int main()
{
	printf("%d\n", sizeof(struct S3));
}

运算结果:
在这里插入图片描述

3.1例三解题思路:

在这里插入图片描述

4.嵌套结构体的内存计算

struct S3
{
	double d;
	char c;
	int i;
};
struct S4
{
	char c1;
	struct S3 s3;
	double d;
};
int main()
{
    printf("%d\n", sizeof(struct S4));
}

运算结果:
在这里插入图片描述

4.1例四解题思路:

在这里插入图片描述

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值