【C++学习笔记(一)】之结构体的内存对齐

本文章由公号【开发小鸽】发布!欢迎关注!!!


老规矩–妹妹镇楼:

一. 结构体的内存对齐:

        结构体可以存储不同类型的数据,每种数据所占的字节数都不同。而结构体是按照最大字节数来存储的,若结构体中最大的数据类型占8个字节,则结构体存储的内存中按8个字节为一格存储,将其他较少字节数的数据往里填,若有空余,则看下一个数据能否填入;若不能,则按照内存对齐原则,从下一格重新开始填入数据,空余的内存则被跳过。

二. 设置结构体如下:
struct stus{
	char *p;			//4
	char arr[2];		//1*2
	int c;				//4
	short d;			//2
	double f;			//8
	long g;				//4
	float h[2];			//4*2
};

        若不调整结构体中数据存储顺序,则按最大数据类型8个字节为一格,依次填入,如下图
在这里插入图片描述
        红色圈为空余的内存
        计算得到结构体整体内存占40个字节

若将结构体中数据类型从大到小排列:

struct stus{
	double f;			//8
	float h[2];			//4*2
	long g;				//4
	int c;				//4
	char *p;			//4
	short d;			//2
	char arr[2];		//1*2
};

        调整后结构体整体内存占32个字节

结论:

        内存空余的情况得到了优化。但是打乱结构体的排列顺序也可能导致阅读结构体的思维混乱,所以需要平衡这两者。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值