我有一个关于内存地址如何存储值的noob问题。
例如,
addr +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F +0123456789ABCDEF
0000 50 61 78 20 69 73 20 61 20 72 65 61 6C 6C 79 20 Pax is a really
0010 63 6F 6F 6C 20 67 75 79 00 cool guy.
0000是地址吗? 50 61 78 20 69 73 20 61 20 72 65 61 6C 6C 79 20存储在0000地址中的值是什么?
答案 0 :(得分:3)
此处0000
是来自标签addr
的地址。 0000
存储的唯一值是50
。每个字节都有自己的地址:
------+--------
addr | data
------+--------
0000 | 50
0001 | 61
0002 | 78
0003 | 20
0004 | 69
0005 | 73
0006 | 20
0007 | 61
0008 | 20
0009 | 72
000A | 65
000B | 61
000C | 6C
000D | 6C
000E | 79
000F | 20
如果您考虑将0000
作为基地址,则可以说20
,最后一个值存储在F
0000 + F = 000F
,基地址+偏移自那个地址。
答案 1 :(得分:1)
0000
可能只是偏离本地化地址。基本上,BaseAddress + 0000
,BaseAddress + 0010
等
值为ASCII,与右侧的字符匹配。您已在该内存中存储了一条文本消息(或字符串)。
每个存储器地址存储一个字节(也是8位,也是2个十六进制(“十六进制”)数字)。 0000
(0000 +0
)的十六进制值为50
,0001
(0000 +1
)的十六进制值为61
,依此类推。
答案 2 :(得分:1)
addr +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F +0123456789ABCDEF
0000 50 61 78 20 69 73 20 61 20 72 65 61 6C 6C 79 20 Pax is a really
0010 63 6F 6F 6C 20 67 75 79 00 cool guy.
<00> 0000似乎是一个地址,但可能是一个相对地址(或偏移量)。
这个输出好像说
addr value
0000+0 (0000) 0x50
0000+1 (0001) 0x61
0000+2(0002) 0x78
....
答案 3 :(得分:0)
是的,0000
可以被视为地址。至于0000
处“存储”的内容,具体来说,值50
存储在那里,0001
处61
的值存储,并且一直存储。< / p>
但是,对于更高级别的数据结构,例如16位整数,或32位整数,或字符串,甚至是记录结构,“0000
处存储的内容”的答案会变得更加混乱。
如果在0000
存储16位二进制整数,对于Intel架构,则值为6150
或十进制24912。这是因为英特尔是“小端”,并且稍后在地址空间中存储了最高有效字节。对于“大端”处理器,值为5160
或20832十进制。
现在,这可以用二进制编码的十进制编码,在这种情况下,值将是6150或5160(十进制)(取决于字节序)。
所以,你可以看到,即使对于像整数这样简单的东西,它也有不同的方式存储在内存中。
因此,在字节级别,答案非常简单。除此之外,它取决于存储的数据如何在字节级别表示。