C內存3:虛擬地址

在C語言中有一個指針這麼一個煩人的東西,經常會涉及到內存地址等概念。

int a=4;

//這段代碼保存之後就存在硬盤上,之後對這個代碼操作要從硬盤上讀取到內存,最後CPU才計算,再將計算結果返回給內存。

4既有一個虛擬地址,還有一個物理地址(這樣說對?還是4就對應一個地址就是存在於物理地址中,之後a對應虛擬地址),這兩個地址都是指在什麼上邊的地址?(虛擬地址就是在程序裏面使用的地址,物理地址就是內存條裏的地址。首先變量名a在編譯之後就會變成虛擬地址(就不存在了),知道a的虛擬地址,再根據映射關係,去內存上找物理地址,才能取到4來使用?)

編寫一個程序時會有變量名函數名數據等內容,但是該程序在被編譯後就只存在數據、地址和指令這些東西,變量名函數名就會轉化爲地址形式來存在。虛擬地址就是在程序裏面使用的地址,物理地址就是內存條裏的地址。編寫不同的程序就會產生相應的不同的虛擬地址(比如一個程序int a=4;和另外一個程序int a=5;根據數據類型的話,這兩個程序可以使用同一個虛擬地址,操作系統會定義不同的映射關係,分別找到4和5在內存上的物理地址,進而取數據操作。),但是物理地址是固定的,就在內存上那麼大;(不同程序的物理地址是相互糾纏的,就那麼大的空間你使用了我就不能使用了)。

我們平時在程序中使用&取地址符號和指針(存儲地址),所指的地址都是虛擬地址,物理地址是操作系統根據映射關係給我們找的,我們不用管。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章