class为什么要4字节对齐?

跳转==>讲的特别好<==跳转

首先要确认读过上边的文章

在评论区有这样的问题:

在结构体中如果定义了数组的话是怎么进行内存对齐的呢?
比如定义了一个char a[7]这样一个不能被4整除大小的数组,如何和其他变量进行字节对齐呢?

这个问题特别值得思考。

//sizeof 的结果是7
class A
{
 private:
	char i[7];
};



//sizeof 的结果是12.
class B
{
private:
	 char i[7];
	 int j;
};

为什么呢?
其实只要理解“数据总线32位意味着一次可读写4byte”这句话就OK了。
在这里插入图片描述
上图黄色是字符串数组,蓝色是int变量,黑色是填充的字节。
上边是不对齐的,下边是对齐。
不对齐时,读取j变量需要两次I/O操作,对齐后只需要一次。

现在可以回答为什么sizeof(A)的结果是7了,首先回顾前边文章的内容。
在这里插入图片描述

为了节省内存,当A的对象后的变量是一字节时,就不用对齐,如果大于1字节,就会对齐。

最后提醒一下,无论对不对齐,七个字节的char数组,完整读取都是要两次I/O操作的,和上图的double类型一样。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值