转载:http://blog.sina.com.cn/s/blog_4cd3b57101000kea.html
1,结构体中变量的依声明的顺序来存放
2,char可以以任一字节开始存放。
3,short只能以一个字长的第一个字节或第三个字节开始存放。
4,其他如int等等于四字节的类型只能从一个字长的第一个字节开始存放。
5,double类型只能从两个字长整数倍的地方开始存放。
6,当排列时的位置不能满足类型需要的开始位置时,往下掠过一个及以上的字节,开始存放。
7,当排列完毕后,结构体必须补齐到,其长度为其结构体内长度最长的元类型的整数倍。
例如:
struct Node
{
char a;
short b;
char c;
int d;
double e;
char f;
};
该结构体中,
第一个字节存储a,第二个字节略过,第三个和第四个字节存储b,
第二个字的第一个字节存储c,其余的三个字节略过,
第三个字存放d,
第四个字略过(条款5,6),
第五个字和第六个字存放e,
第七个字的第一个字节存放f,
其余三个字节以及第八个字均略过(条款7)。
所以最终此结构体的大小为8*4=32Byte。
上面的条款还不足解释下面的结构体内存分布:
struct NN
{
Node mNode;
char a;
};
8,当结构体A包含结构体B时,B的大小和排列不变,A最后的补齐按照A和B所有的元素中最大的元类型的长度为单位。
由上面的试验可看出,结构体中变量声明的顺序比较重要,有时会大大影响到其占用的空间,最好的顺序应该是,将变量由小到大排列声明。