2013-08-16 74 views
0

在閱讀時組裝藝術有一天,我在內存佈局上來到部分here。它開始討論分段內存,我認爲它沒有多大意義。x86分段內存

將內存拆分爲段是非常有意義的組織方式,但使用函數segment + offset時,函數重複其輸出時該做什麼?例如1038 + 57,57 + 10381095 + 0都出現在線性地址1095.這不是一件壞事嗎?如果你不是故意的,你會不小心在相同的線性內存空間中尋址嗎?

維基百科說,它可以用於一個優勢,「例如,當處理多個嵌套數據結構時」,但是如何用它來更快地解決嵌套結構呢?

回答

1

您錯過了這些地址計算方式的重要部分。

在8086,8088,80186和80188(以及其他在實模式下運行的處理器)中,將段映射到物理地址的功能非常簡單。 CPU將段值乘以16(10h)並添加偏移量部分。

不要忘記,這些地址總是以十六進制計算。

+0

但是,這仍然存在這個問題:'4 * 16 + 0 = 64','0 * 16 + 64 = 64'。將基數乘以基數不會消除爲不同參數生成相同輸出的函數。 – charmlessCoin

+1

閱讀80x86上4.4規範化地址的部分,它涵蓋了你的問題;)。正如其中一部分所述,就我從大學時代的記憶來看,他們認爲我們是這樣的:你有一個N字大小的記憶,你可以把它分成M段,每段由K字組成,例如,你會把它的段和偏移量部分的地址,但偏移量只會從0到FFh,這將避免計算實際地址時的問題... – JanBo

+0

不要讓這些段混淆你很多,請閱讀看看代碼段,數據段等部分,它會清除一切。它不是以任何方式物理分割內存,而是編譯器等使用的解釋和表示,您將看到... – JanBo