鱼C论坛

 找回密码
 立即注册
查看: 2259|回复: 20

[已解决]这个结构体数组在内存中占用多少个字节_已解决

[复制链接]
发表于 2022-6-30 20:47:58 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 涛4091 于 2023-2-23 11:02 编辑

屏幕截图 2022-06-25 195118.png
请问:这样一个int是占用2个字节吗?一个char也是2个字节和float也是两个吗?
最佳答案
2022-7-1 20:33:17
涛4091 发表于 2022-7-1 20:13
你好,一个int占用4个字节,一个字节8位。但是查看地址发现只占用了两个字节就是0000000062FE10 、000000 ...


这跟你使用的软、硬件平台挂钩。
32位平台 int 不就是4个字节? 32位/8位  =   4
16位平台 int 不就是2个字节? 16位/8位 =2
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-6-30 20:50:25 From FishC Mobile | 显示全部楼层
用 sizeof + 结构体名称实测啊。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-6-30 20:59:36 | 显示全部楼层
jackz007 发表于 2022-6-30 20:50
用 sizeof + 结构体名称实测啊。

查了,是4个字节。int型是从:000000000062FE10、000000000062FE11、000000000062FE12、000000000062FE13.
只有后面4个二进制位变了,应该是半个字节。怎么算的4字节呢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-6-30 21:36:41 | 显示全部楼层

回帖奖励 +5 鱼币

结构体内存占用有专门的教程。
通常来说是以占用最大内存的类型为准来对齐,比如你int占4个字节,后面的类型都比4个字节小,则以4个字节为准来对齐。如你这就应该是占12个字节
参考:
https://www.jb51.net/article/207082.htm

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-6-30 22:00:47 | 显示全部楼层

回帖奖励 +5 鱼币

涛4091 发表于 2022-6-30 20:59
查了,是4个字节。int型是从:000000000062FE10、000000000062FE11、000000000062FE12、000000000062FE13 ...

1.结构体数组大小就是 结构体大小 * 元素个数
2.想知道结构体大小直接输出 sizeof(struct Student),不要想当然的以为是 int + char + float 的大小,因为内存对齐的缘故,实际结构体可能会比这三个类型加起来要大
3.sizeof得到的数值单位就是字节,你这列出4个地址是如何得来的?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-6-30 22:30:26 | 显示全部楼层

回帖奖励 +5 鱼币

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-6-30 22:30:55 | 显示全部楼层

回帖奖励 +5 鱼币

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-7-1 00:59:47 | 显示全部楼层

回帖奖励 +5 鱼币

sizeof(struct Student)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-7-1 08:04:51 | 显示全部楼层
学习了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-7-1 08:06:30 | 显示全部楼层

回帖奖励 +5 鱼币

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-7-1 08:20:02 | 显示全部楼层

回帖奖励 +5 鱼币

sizeof(struct Student)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-7-1 11:02:59 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-7-1 15:16:16 | 显示全部楼层
如果没错的话,楼主的4个字节是boy1指针的大小占用4字节,输出的是boy1的首地址和boy1的下一个元素的首地址
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-7-1 15:36:33 | 显示全部楼层

回帖奖励 +5 鱼币

int类型占4字节吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-7-1 18:48:01 | 显示全部楼层

回帖奖励 +5 鱼币

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2022-7-1 20:10:16 | 显示全部楼层
风车呼呼呼 发表于 2022-6-30 22:00
1.结构体数组大小就是 结构体大小 * 元素个数
2.想知道结构体大小直接输出 sizeof(struct Student),不 ...

你好,我想说的是1个字节等于8位,就是0000,0000 .
但是内存中只改变了4位,就是半个字节。
程序中一个int是4个字节,但我算的是2个字节
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-7-1 20:13:57 | 显示全部楼层
ba21 发表于 2022-6-30 21:36
结构体内存占用有专门的教程。
通常来说是以占用最大内存的类型为准来对齐,比如你int占4个字节,后面的类 ...

你好,一个int占用4个字节,一个字节8位。但是查看地址发现只占用了两个字节就是0000000062FE10 、0000000062FE11 、0000000062FE12 、0000000062FE13
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-7-1 20:14:29 | 显示全部楼层
int 是4
char 是4(1格式对齐成4)
float是4
总共16(12格式对齐成16)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-7-1 20:15:16 | 显示全部楼层
涛4091 发表于 2022-7-1 20:10
你好,我想说的是1个字节等于8位,就是0000,0000 .
但是内存中只改变了4位,就是半个字节。
程序中一 ...

x86是int2字节(16bit)
x64是int4字节(32bit)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-7-1 20:33:17 | 显示全部楼层    本楼为最佳答案   
涛4091 发表于 2022-7-1 20:13
你好,一个int占用4个字节,一个字节8位。但是查看地址发现只占用了两个字节就是0000000062FE10 、000000 ...


这跟你使用的软、硬件平台挂钩。
32位平台 int 不就是4个字节? 32位/8位  =   4
16位平台 int 不就是2个字节? 16位/8位 =2
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-19 22:47

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表