这个地址怎么能容纳这么多数据?
How Can This Address Hold So Much Data?
不确定这是否是一个明显可怕的误解,但我在检查内存时遇到了很多麻烦。以下是来自 gdb 的检查 x/8w
.
0xbffff7a0: 0xb7f9f729 0xb7fd6ff4 0xbffff7d8 0x08048529
0xbffff7b0: 0xb7fd6ff4 0xbffff870 0xbffff7d8 0x00000000
所以我假设 0xb7f9f729
在 0xbffff7a0
,然后 0xb7fd6ff4
在 0xbffff7a4
,等等。你能解释一下这是如何逐字节工作的吗?是从第一个内存部分到下一个内存部分的 16 个字节,每 4 个字节都有自己的字吗?
我很难理解这个记忆概念,有人知道可以让学习变得更容易的好资源吗?
两个问题都是肯定的。
gdb(1)
将您的 x/8w
命令中的 w
修饰符理解为 "four byte words",因此您以四个为一组打印 32 个字节。 gdb(1)
只是将它们排成短行并带有偏移以便于阅读。
我应该提一下,打印的确切值实际上取决于 platform endianness。
你会得到与 x/32
相似但可能更容易理解的布局。
不确定这是否是一个明显可怕的误解,但我在检查内存时遇到了很多麻烦。以下是来自 gdb 的检查 x/8w
.
0xbffff7a0: 0xb7f9f729 0xb7fd6ff4 0xbffff7d8 0x08048529
0xbffff7b0: 0xb7fd6ff4 0xbffff870 0xbffff7d8 0x00000000
所以我假设 0xb7f9f729
在 0xbffff7a0
,然后 0xb7fd6ff4
在 0xbffff7a4
,等等。你能解释一下这是如何逐字节工作的吗?是从第一个内存部分到下一个内存部分的 16 个字节,每 4 个字节都有自己的字吗?
我很难理解这个记忆概念,有人知道可以让学习变得更容易的好资源吗?
两个问题都是肯定的。
gdb(1)
将您的 x/8w
命令中的 w
修饰符理解为 "four byte words",因此您以四个为一组打印 32 个字节。 gdb(1)
只是将它们排成短行并带有偏移以便于阅读。
我应该提一下,打印的确切值实际上取决于 platform endianness。
你会得到与 x/32
相似但可能更容易理解的布局。