涛4091 发表于 2022-6-30 20:47:58

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

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


请问:这样一个int是占用2个字节吗?一个char也是2个字节和float也是两个吗?

jackz007 发表于 2022-6-30 20:50:25

用 sizeof + 结构体名称实测啊。

涛4091 发表于 2022-6-30 20:59:36

jackz007 发表于 2022-6-30 20:50
用 sizeof + 结构体名称实测啊。

查了,是4个字节。int型是从:000000000062FE10、000000000062FE11、000000000062FE12、000000000062FE13.
只有后面4个二进制位变了,应该是半个字节。怎么算的4字节呢

ba21 发表于 2022-6-30 21:36:41

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

风车呼呼呼 发表于 2022-6-30 22:00:47

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

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

nikezhi 发表于 2022-6-30 22:30:26

{:5_102:}

eyuyan 发表于 2022-6-30 22:30:55

{:7_146:}

leletatann 发表于 2022-7-1 00:59:47

sizeof(struct Student)

kerln888 发表于 2022-7-1 08:04:51

学习了{:10_256:}

kerln888 发表于 2022-7-1 08:06:30

{:10_256:}{:10_256:}{:10_256:}{:10_256:}

1molHF 发表于 2022-7-1 08:20:02

sizeof(struct Student)

1050293757 发表于 2022-7-1 11:02:59

{:5_109:}

桃花飞舞 发表于 2022-7-1 15:16:16

如果没错的话,楼主的4个字节是boy1指针的大小占用4字节,输出的是boy1的首地址和boy1的下一个元素的首地址

不求人_ 发表于 2022-7-1 15:36:33

int类型占4字节吧

kkl44stupid 发表于 2022-7-1 18:48:01

{:10_256:}

涛4091 发表于 2022-7-1 20:10:16

风车呼呼呼 发表于 2022-6-30 22:00
1.结构体数组大小就是 结构体大小 * 元素个数
2.想知道结构体大小直接输出 sizeof(struct Student),不 ...

你好,我想说的是1个字节等于8位,就是0000,0000 .
但是内存中只改变了4位,就是半个字节。
程序中一个int是4个字节,但我算的是2个字节

涛4091 发表于 2022-7-1 20:13:57

ba21 发表于 2022-6-30 21:36
结构体内存占用有专门的教程。
通常来说是以占用最大内存的类型为准来对齐,比如你int占4个字节,后面的类 ...

你好,一个int占用4个字节,一个字节8位。但是查看地址发现只占用了两个字节就是0000000062FE10 、0000000062FE11 、0000000062FE12 、0000000062FE13

ExiaGN001 发表于 2022-7-1 20:14:29

int 是4
char 是4(1格式对齐成4)
float是4
总共16(12格式对齐成16)

ExiaGN001 发表于 2022-7-1 20:15:16

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

x86是int2字节(16bit)
x64是int4字节(32bit)

ba21 发表于 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
页: [1] 2
查看完整版本: 这个结构体数组在内存中占用多少个字节_已解决