3

我对内存地址如何存储值有疑问。

例如,

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 地址中的值吗?

4

4 回答 4

3

0000是来自标签的地址addr。存储在的唯一值000050。每个字节都有自己的地址:

------+--------
 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,最后一个值存储在F0000 + F = 000F地址 + 该地址的偏移量处。

于 2013-10-30T02:26:31.320 回答
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.

0000 似乎是一个地址,但可能是一个相对地址(或偏移量)。这个输出似乎说

addr            value
0000+0 (0000)   0x50  
0000+1 (0001)   0x61
0000+2(0002)    0x78 
  ....
于 2013-10-30T02:25:16.597 回答
1

0000可能只是与本地化地址的偏移量。基本上, BaseAddress + 0000,BaseAddress + 0010等。

这些值是 ASCII,它们与右侧的字符匹配。您已在该内存中存储了一条短信(或字符串)。

每个内存地址存储一个字节(也是 8 位,还有 2 个十六进制(“hex”)数字)。 0000( 0000 +0) 具有十六进制值500001( 0000 +1) 具有十六进制值61,依此类推。

于 2013-10-30T02:22:39.043 回答
0

是的,0000可以认为是一个地址。至于在 处“存储”什么0000,具体来说,值50存储在那里,并且存储在0001值处61,等等。

然而,对于更高级别的数据结构,例如 16 位整数、32 位整数、字符串,甚至记录结构,“存储在什么位置0000”的答案变得更加混乱。

如果 16 位二进制整数存储在0000, 对于 Intel 架构,则该值将是6150, 或十进制的 24912。这是因为 Intel 是“little endian”,并将最高有效字节稍后存储在地址空间中。对于“大端”处理器,该值为5160十进制或 20832。

现在,这可以用二进制编码十进制编码,在这种情况下,十进制值将是 6150 或 5160(取决于字节序)。

因此,您可以看到,即使对于像整数这样简单的东西,也可以通过不同的方式将其存储在内存中。

因此,在字节级别,答案非常简单。除此之外,它还取决于所存储的数据在字节级别上的表示方式。

于 2013-10-30T02:26:58.687 回答