strcut分配空间的方法

记住下面2点就OK

1、结构体内每个成员相对结构体首地址的偏移量必须是其大小的倍数。

2、整个结构体的大小必须是结构体内最大成员大小的倍数。

e.g:

struct s1 
{ 
int i: 8; 
int j: 4; 
int a: 3; 
double b; 
};

占用16个字节 理论上是这样的,首先是i在相对0的位置,占8位一个字节,然后,j就在相对一个字节的位置,由于一个位置的字节数是4位的倍数,因此不用对齐,就放在那里了,然后是a,要在3位的倍数关系的位置上,因此要移一位,在15位的位置上放下,目前总共是18位,折算过来是2字节2位的样子,由于double是8 字节的,因此要在相对0要是8个字节的位置上放下,因此从18位开始到8个字节之间的位置被忽略,直接放在8字节的位置了,因此,总共是16字节。

posted @ 2009-12-03 11:12  zedzhao  阅读(171)  评论(0编辑  收藏  举报