永发信息网

在C语言中下面变量占用的内存字节是多少?

答案:3  悬赏:40  手机版
解决时间 2021-01-15 19:14
  • 提问者网友:骨子里的高雅
  • 2021-01-14 22:50
在C语言中下面变量占用的内存字节是多少?
最佳答案
  • 五星知识达人网友:長槍戰八方
  • 2021-01-14 23:12
union are
注意点:
元素a数组长度9Byte,b长度2Byte,c长度8Byte
union中,最大长度的是c元素,所以内存起始和结束都对齐到8的倍数,补齐到了2*8=16Byte
参照图片中灰色区域的16Byte


struct arew

struct arew
{
    char a[9];      // 10Byte (内存占位补齐到偶数地址)
    short int b;    // 2Byte
    long int c;     // 4Byte
    char e;         // 8Byte  (联合体之前最后一个结构体元素补齐到8倍数地址,为了之后的联合体从8的倍数地址起始)
    union are d;    // 16Byte (同上)
};
追问你说a数组的长度是9,为啥最后又说最长的是8,补齐是16呢?我想,是不是这样的,因为变量数据类型最长的是double,所以看数据类型最长的是8,然后第一个类型数据占了9,第二个占了2,9+2等于11,然后必须是最后那个8的最小倍数,再加5,就是16?
结构体里的依次是10,2,4,8,16,第一个为什么是10?为什么和数组里的长度不同?还有就是10+2+4+8=24,24不是16的倍数,为什么不补
全部回答
  • 1楼网友:琴狂剑也妄
  • 2021-01-15 00:50
int,float是4,char是1,*p是4
  • 2楼网友:千杯敬自由
  • 2021-01-14 23:38
关键字union声明的变量叫“共用体”,占用字节多少由其中成员变量最大占用字节数确定,确定规则是按最大基本成员变量据点字节数的整数倍“对齐”。在are中占用字节数最多的是a,9个字节;最大基本变量c所占字节数是8,所以“对齐”的结果是取比9大的8的最小整数倍16——你可以验证一下,把char a[9];改成char a[8];,虽然只减少了一个字节,但总占有字节数立马就应该变成8了。由struct声明的变量叫结构体,总占有字节数是其所有成员变量据点字节数的总和,也要“对齐”。其中占用字节最多的成员变量是c,4字节,所以a要点12字节(空了3字节),b要占4字节(空了2字节),c占4字节,e占4字节(空了3字节),are16字节,所以总共是40字节。对于struct还有个情况,那就是当把成员变量的前后次序换一换时,有可能使总的占用字节数发生变量,这是因为对齐时是从前至后依次计算的……
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯