2011-10-12 84 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.這隻會回答一半。

同樣,頁面映射表的自由空間和空間利用率,因此,雖然更新的地址保持在源代碼一樣,在執行你該地址獲得不同的值。