2011-10-12 56 views
2

如果我用一个比喻来解释这个问题会更好。这里有云......存储地址'名称/标签存储在哪里?

1.There是在52一所房子,公园大道 - (内存地址)

2.我住在这 - (数据)

3.如果您问我住在哪里,我会说'52,Park Avenue'(我指的是记忆位置)

但是一栋房子的前面的草坪上有'号码和街道名'作为'Sign/Board'即使我搬出去或居住在其中......无论哪种方式! 现在这个'Sign/Board'在哪里存储了一个内存位置?

简单地说 - 我们怎样才能知道某个特定的内存地址为“x0y34vf”比如?

+1

我不认为你这样做。如果我在计算机的内存中给你一个任意的数据而没有用它的地址来引用它,你就不知道它在哪里,除非你去搜索它。 –

+2

每个内存位置都有一个名称/标签吗?另一种说法就像在一个磁驱动器中(对于exmp),如果内存地址被指定为某个'x034',那么r/w头如何知道要查找的位置? – Ganz7

+0

就这么说吧。如果你有一条长长的街道,每个房子都从1开始顺序编号,每100码就有一座房子。你可以很快找出你需要开车多远找到地址为“25”的房子。 –

回答

0

内存映射到其中包含两套,像一个十六进制和实际部门和页面,如果该地址被要求为它应该去的虚拟地址表。

现在你可能会问的一个问题是,为什么我每次访问相同的十六进制地址,我得到不同的价值观,虽然他们都是垃圾。

答案是,当你编译并运行程序,该程序被加载到RAM(随机存取存储器)和交换出去,当你完成它运行。所以你的程序第一次可能会在第90块处获得空间,因为内存是免费的。但是在第二次运行时,程序可能会被加载到另一个块,比如720.这只会回答一半。

同样,页面映射表的自由空间和空间利用率,因此,虽然更新的地址保持在源代码一样,在执行你该地址获得不同的值。