数据补齐满足原则如下:
原则1、数据成员对齐规则:结构(struct或class,不包括union)的数据成员,第一个数据成员放在offset为0的地方,以后每个数据成员存储的起始位置要从该成员大小的整数倍开始(比如int在32位机为4字节,则要从4的整数倍地址开始存储)。
原则2、结构体作为成员:如果一个结构里有某些结构体成员,则结构体成员要从其内部最大元素大小的整数倍地址开始存储。(struct a里存有struct b,b里有char,int,double等元素,那b应该从8的整数倍开始存储。)
原则3、收尾工作:结构体的总大小,也就是sizeof的结果,必须是其内部最大成员的整数倍,不足的要补齐。
#include <iostream>
using namespace std;
struct A
{
short a; //大小为2, 因为b的大小是4,所以要补2
int b; //大小为4
char c; // 大小为1
// 所以2+2+4+1+3 = 12 ,最后的三,因为“原则3”,9并不是4的倍数,所以需要补3