struct内存对齐

来源:互联网 发布:2017海岛奇兵神像数据 编辑:程序博客网 时间:2024/06/02 03:08

       关于C++中的struct内存对齐,应该也是初学者比较疑惑的一个知识点,但是搞清楚之后会发现非常简单,这里解释一下struct内存到底怎么对齐。

       主要记住以下两点:

1.各成员变量存放的起始地址相对于结构的起始地址的偏移量必须为该变量的类型所占用的字节数的倍数

2.整个struct的内存大小需为struct中最大字节数变量的整数倍


下面举个例子:

struct A{

int a;

char b;

short c;

int d;

}

int型的a占4字节,char型的b占1字节,根据要点1,b的偏移量就是a的大小4字节,是b大小1字节的整数倍,因此已经对齐,再看short c的大小是2字节,相对于结构体起始内存偏移量是(4+1)=5字节,不是2的整数倍,因此这里需要插入1字节,成6字节,这样才是2字节的整数倍,最后看d,偏移量为8,已经是整数倍,现在总内存是12字节,是struct中最大字节变量的整数倍,不需要对齐,因此总的大小为12字节。