C内存3:虚拟地址
在C語言中有一個指針這么一個煩人的東西,經常會涉及到內存地址等概念。
int a=4;
//這段代碼保存之后就存在硬盤上,之后對這個代碼操作要從硬盤上讀取到內存,最后CPU才計算,再將計算結果返回給內存。
4既有一個虛擬地址,還有一個物理地址(這樣說對?還是4就對應一個地址就是存在于物理地址中,之后a對應虛擬地址),這兩個地址都是指在什么上邊的地址?(虛擬地址就是在程序里面使用的地址,物理地址就是內存條里的地址。首先變量名a在編譯之后就會變成虛擬地址(就不存在了),知道a的虛擬地址,再根據映射關系,去內存上找物理地址,才能取到4來使用?)
編寫一個程序時會有變量名函數名數據等內容,但是該程序在被編譯后就只存在數據、地址和指令這些東西,變量名函數名就會轉化為地址形式來存在。虛擬地址就是在程序里面使用的地址,物理地址就是內存條里的地址。編寫不同的程序就會產生相應的不同的虛擬地址(比如一個程序int a=4;和另外一個程序int a=5;根據數據類型的話,這兩個程序可以使用同一個虛擬地址,操作系統會定義不同的映射關系,分別找到4和5在內存上的物理地址,進而取數據操作。),但是物理地址是固定的,就在內存上那么大;(不同程序的物理地址是相互糾纏的,就那么大的空間你使用了我就不能使用了)。
我們平時在程序中使用&取地址符號和指針(存儲地址),所指的地址都是虛擬地址,物理地址是操作系統根據映射關系給我們找的,我們不用管。
?
總結
- 上一篇: C内存2:程序是如何运行的
- 下一篇: C指针1:基础