記憶體按訪問的方式來看,就像長方形的帶子,位址依次公升高。記憶體是乙個隨機讀寫裝置,即可以訪問內部任何一處,不需要從頭開始找,只要直接給出位址即可,如訪問記憶體0xc00,只要將該位址寫入位址匯流排便可,而分段是記憶體訪問的機制,是給cpu用的訪問記憶體的方式,只有cpu才會關注段,那為什麼cpu要關注段呢,原因如下:
編譯器在編譯程式時,肯定要根據cpu訪問記憶體的規則將**編譯成機器指令,這樣編譯出來的程式才能在該cpu上執行,所以說,在直接以絕對實體地址訪問記憶體的cpu上執行程式,該程式中指令也必須得是實體地址,若引導程式執行,不管是核心程式還是使用者程式,程式中位址若是絕對實體地址,那麼該程式必須放在記憶體中的固定地方,於是兩個編譯出來位址相同的使用者程式肯定沒法同時執行,於是偉大的計算機前輩們就想出了這樣乙個方式,讓cpu採用「段基址+段內偏移位址」的方式來訪問任意記憶體,這樣的好處就是程式可以重定位了,儘管程式中指令給的是絕對實體地址,但可以執行多個程式了。
重定位就是將程式中的指令的位址改寫成另外乙個位址,但該位址處的內容還是原位址處的內容。
cpu採用「段基址+段內偏移位址」的形式訪問記憶體,就需要專門提供段基址暫存器,這些是cs,ds,es等,程式中需要哪塊記憶體,只需要先載入合適的段到段基址暫存器中,再給出相應的偏移位址即可,cpu會將這兩個位址相加後的結果用於記憶體訪問,送上位址匯流排。
為什麼要分頁分段儲存
首先說為什麼會出現分頁分段,如果我們直接使用物理記憶體直接儲存的話,會因為併發的原因造成儲存混亂,各個指令混雜儲存,製造很多麻煩。如何解決 解決這個問題通常有兩種方法 一種通過基址暫存器和界線暫存器形成位址空間,通過交換技術解決記憶體超載。另外一種就是基於分頁的虛擬位址技術。1 交換技術 把乙個程序...
為什麼要記憶體對齊
當我們聽到 記憶體對齊 這個概念時,從字面意思來看,很容易理解。那就是讓記憶體按一定規則對齊。當然 就會有人說 你這不是廢話 現在我就來說一說為什麼要記憶體對齊以及怎麼個對齊法 如何對齊 記憶體對齊 記憶體對齊 應該是 編譯器的 管轄範圍 編譯器為程式中的每個 資料單元 對於記憶體對齊問題,主要存在...
為什麼要記憶體對齊?
cpu訪問非對齊的記憶體時為何需要多次讀取再拼接?首先簡單說一下何為記憶體對齊。例如,當cpu需要取4個連續的位元組時,若記憶體起始位置的位址可以被4整除,那麼我們稱其對齊訪問。反之,則為未對齊訪問。比如從位址0xf1取4位元組就是非對齊 位址 訪問。簡單的看來,對於乙個資料匯流排寬度為32位的cp...