本帖最后由 烛风小糊涂 于 2016-5-13 15:34 编辑
这个问题基础班视频都讲的很详细的,但还是说下吧~
计算结构体所占字节数需要用到对齐模数,即结构体内基本数据类型中占用字节数最大的那个。比如一个结构体有三个成员变量,依次是 char name[10]; int age; char sex。那么对齐模数就是int类型所占的字节:4,系统会依次开辟一块块以4字节为最小单位的内存空间。
计算:
首先,char name[10]总共占10个字节,所以系统为了存储这10个字节会开辟3个4,即12字节空间,多出的2字节先放那;
然后是int age,刚才剩下的2字节并不足以存下age这个整型变量,所以系统又开1个4,即4字节去存储age这个int类型变量。
最后 char sex,由于刚才开辟的16字节空间被占得满满的(中间的2个空的字节空间不算),所以系统得又开辟4个字节空间去存储sex这个char类型变量;
所以,如果你sizeof一下,这个结构体占12+4+4,即20个字节的空间。
注意:结构体中成员变量的声明顺序会影响到总的字节数。比如刚才那三个,不按照一开始我写的那个顺序,而是按照 int age; char sex;char name[10]; 这个顺序去声明,则结果为占16个字节空间。
|