链接:https://www.nowcoder.com/questionTerminal/29193a1acc4e4fd4b349a26e4ad78291?
来源:牛客网
1、结构体所占的内存大小:
a.整体所占的内存大小应该是结构中成员类型最大的整数倍,此处最大的类型是int_64t,占8个字节。。即最后所占字节的总数应该是8的倍数,不足的补足;
b.数据对齐原则-内存按结构体成员的先后顺序排列,当排到该成员变量时,其前面所有成员已经占用的空间大小必须是该成员类型大小的整数倍,如果不够,则前面的成员占用的空间要补齐,使之成为当前成员类型的整数倍。假设是地址是从0开始,结构体中第一个成员类型char型占一个字节,则内存地址0-1,第二个成员从2开始,int型所占内存4个字节,根据原则b,第一个成员所占内存补齐4的倍数,故第一个成员所占内存:1 + 3 = 4; 第二个成员占5-8. 第三个成员占8个字节,满足原则b,不需要补齐,占9-16. 第四个成员占一个字节,占17. 故总内存为1 + 3 + 4 + 8 + 1 = 17个字节,但根据原则a,总字节数需是8的倍数,需将17补齐到24. 故此结构体总字节数为:24字节
2、计算
data[1][5],意思是前面有15个元素。则第15个元素的起始地址为: 24 * 15 = 360, 即 X + 360
则data[1][5].c的地址为: 360 + 1 + 3 + 4 = 368,即 X + 368
来源:牛客网
1、结构体所占的内存大小:
a.整体所占的内存大小应该是结构中成员类型最大的整数倍,此处最大的类型是int_64t,占8个字节。。即最后所占字节的总数应该是8的倍数,不足的补足;
b.数据对齐原则-内存按结构体成员的先后顺序排列,当排到该成员变量时,其前面所有成员已经占用的空间大小必须是该成员类型大小的整数倍,如果不够,则前面的成员占用的空间要补齐,使之成为当前成员类型的整数倍。假设是地址是从0开始,结构体中第一个成员类型char型占一个字节,则内存地址0-1,第二个成员从2开始,int型所占内存4个字节,根据原则b,第一个成员所占内存补齐4的倍数,故第一个成员所占内存:1 + 3 = 4; 第二个成员占5-8. 第三个成员占8个字节,满足原则b,不需要补齐,占9-16. 第四个成员占一个字节,占17. 故总内存为1 + 3 + 4 + 8 + 1 = 17个字节,但根据原则a,总字节数需是8的倍数,需将17补齐到24. 故此结构体总字节数为:24字节
2、计算
data[1][5],意思是前面有15个元素。则第15个元素的起始地址为: 24 * 15 = 360, 即 X + 360
则data[1][5].c的地址为: 360 + 1 + 3 + 4 = 368,即 X + 368
全部评论
相关推荐
12-25 15:13
湖北工业大学 单证员 点赞 评论 收藏
分享
点赞 评论 收藏
分享
查看1道真题和解析