详细解释如何计算一个结构体的大小?


其他:

1.数组下标可为负:a[-1]  相当于  a+(-1);

2.联合体大小就是成员中最大类型的大小;

如何计算一个结构体的大小?

      例如:

struct Test{

int Num;

char *name;//指针大小取决于编译器的位数  ,64位  为:8字节     32位为:4字节

short date;

char ch;

}*p;

总结计算大小规则:

 1.其大小也与成员顺序有关系,因为前一个成员地址需要与下一个成员地址构成需要满足地址对齐,即当前所占字节数需为当前编译器宽度的整数倍

    如以上结构体(假设编译器为64位):int   num  占4字节,下一成员char * name 占用8字节

                                                                 首先4+8=12>8,即编译器宽度(即指针所占大小:8)存放不下,故第一个成员补全为编译器宽度为8字节,(需保持和下一成员地址对齐,如果当前几个数据成员地址实现对齐,则从下一个成员为起点再重复以上规则))

    接下来:short  date 占用2字节,char ch 占用1字节     2+1=3字节,一个地址宽度能放下,但8+8+3=19不是8的倍数,故需要补齐,其实就是再补5个字节,故此结构体大小为:24字节

注意:如何补?补几个字节,取决于编译器宽度,和其中占用内存大小最大的成员,如过超过编译器宽度,以其数据成员所占内存大小为对齐基准,否则补齐到编译器宽度即可

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章