在c語言中有乙個指標這麼乙個煩人的東西,經常會涉及到記憶體位址等概念。
int a=4;
//這段**儲存之後就存在硬碟上,之後對這個**操作要從硬碟上讀取到記憶體,最後cpu才計算,再將計算結果返回給記憶體。
4既有乙個虛擬位址,還有乙個實體地址(這樣說對?還是4就對應乙個位址就是存在於實體地址中,之後a對應虛擬位址),這兩個位址都是指在什麼上邊的位址?(虛擬位址就是在程式裡面使用的位址,實體地址就是記憶體條裡的位址。首先變數名a在編譯之後就會變成虛擬位址(就不存在了),知道a的虛擬位址,再根據對映關係,去記憶體上找實體地址,才能取到4來使用?)
編寫乙個程式時會有變數名函式名資料等內容,但是該程式在被編譯後就只存在資料、位址和指令這些東西,變數名函式名就會轉化為位址形式來存在。虛擬位址就是在程式裡面使用的位址,實體地址就是記憶體條裡的位址。編寫不同的程式就會產生相應的不同的虛擬位址(比如乙個程式int a=4;和另外乙個程式int a=5;根據資料型別的話,這兩個程式可以使用同乙個虛擬位址,作業系統會定義不同的對映關係,分別找到4和5在記憶體上的實體地址,進而取資料操作。),但是實體地址是固定的,就在記憶體上那麼大;(不同程式的實體地址是相互糾纏的,就那麼大的空間你使用了我就不能使用了)。
我們平時在程式中使用&取位址符號和指標(儲存位址),所指的位址都是虛擬位址,實體地址是作業系統根據對映關係給我們找的,我們不用管。
VC 記憶體虛擬位址空間
windows使用一組固定的範圍來分割程序的4gb虛擬位址空間,因此有時可以通過檢視指標的返回值來判斷指標是否有效。虛擬位址空間 大小範圍 作用0x00000000 0x0000ffff 64kb 不能用來檢測空指標賦值 訪問衝突 0x00010000 0x7ffeffff 64kb 2gb 64k...
C 虛擬位址空間
一 引言 在計算機中,每台裝置以及程序都被分配乙個位址空間。位址空間包括物理空間以及虛擬空間。如果將實體地址暴露給程序,使用者就很容易破壞作業系統,從而使系統停止 另外隨著程序數量和體積的增長,核心空間變得越來越不夠用,從而引入虛擬位址空間。實體地址 physical address 放在定址匯流排...
實體地址與虛擬位址(3)
windows 2000 使用基於分頁機制的虛擬記憶體。每個程序有4gb的虛擬位址空間。基於分頁機制,這4gb位址空間的一些部分被映 物理記憶體,一些部分對映硬碟上的交換檔案,一些部分什麼也沒有對映。程式中使用的都是4gb位址空間中的虛擬位址。而訪問物理記憶體,需要使用實體地址。下面我們看看什麼是實...