C++ struct、union、class内存对齐问题解析
前言
都不是很想将其归入到C++专栏,算了。
struct、class与union内存对齐原则
结构(struct)或联合(union)的数据成员,第一个数据成员放在offset为0的地方,以后每个数据成员存储的起始位置要从该成员大小或者成员的子成员大小(只要该成员有子成员,比如说是数组,结构体等)的整数倍开始(比如int在32位机为4字节,则要从4的整数倍地址开始存储。
这一条其实是非常好理解的。其实这个做法的含义就是,对于struct或者是union内的每个元素,都有很合适的内存地址来存储。
那么如果是struct对外呢?其实规则也很简单:找到这个struct中元素所占空间最大的,那么这个struct对外表现的空间占用大小,一定要能被这个最大元素大小整除(基本上就是向上取整了)
所以咱们直接看一下这个例子:
struct test{
char ch1;
int i1;
double d1