跳转==>讲的特别好<==跳转
首先要确认读过上边的文章
在评论区有这样的问题:
在结构体中如果定义了数组的话是怎么进行内存对齐的呢?
比如定义了一个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类型一样。