欢迎光临散文网 会员登陆 & 注册

c语言---结构体空间大小如何计算的

2021-11-24 12:32 作者:风菩提树  | 我要投稿

结构体空间大小如何计算的 

首先,有如下结构体:                        

struct xx

{

int a;

char b;

short c;

};

对于上面这个结构体的大小,也许你跟我一样是这样计算的:

int   a;----->  4 个字节   char   b; ------>1个字节       short  c;----->2个字节

(我这里所用的是64位系统,所以int  a;是4个字节。)所以,计算出来,结构体的空间大小是:4 + 1 +2 = 7字节,可答案是8字节。

计算步骤:

(1)先假设结构体中首个元素(如int a;)的第一个地址是0x0;

(2)元素本身的地址除以偏移量是一个整数,即要存放元素的那个内存地址 % 其本身的字节大小 ==0,如果取余数不等于零,则下个内存地址继续取余数,若等于零,则存放该元素;

(3)存放完所有元素后,计算这块内存的大小, 若结果 除以结构体元素中字节最大的那个数 是一个整数,则结构体的大小就是该结果。若不能整除,则结果加到整除的那个数,那么这个数就是结构体空间的大小。(比如:经过3步的计算,得到的结果是9,而上面元素最大字节数是4,但9不能整除4,所以9加到12才可以整除4,所以结构体空间的大小为12。再若计算得到的结果是8,可以整除4,所以结构体空间的大小为8字节。

图片分析如下:

验证:

#include <stdio> 

int main()

{

struct xx

{

int a;

char b;

short c;

};

printf("结构体xx 的空间大小是:%ld字节\n",sizeof(struct xx ));

return 0;

}

例外:


c语言---结构体空间大小如何计算的的评论 (共 条)

分享到微博请遵守国家法律