首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

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

        首先,有如下结构体:                        

struct xx

{

int a;

char b;

short c;

};

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

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

(当然,在32位系统中,int  a;是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 

int main()

{

struct xx

{

int a;

char b;

short c;

};

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

return 0;

}

例外:

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20210318A064LL00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券