首先明確一點c語言中返回來的地址是虛擬地址(邏輯地址),虛擬地址和物理地址之間的轉化是操作系統自動進行完成的。
有關c語言中返回的地址不是物理地址這里提供一個鏈接:
https://blog.csdn.net/fenggewan/article/details/88408734
邏輯地址,是操作系統分配給你可執行程序的物理地址空間上映射出來的邏輯地址。
一般地邏輯地址和物理地址沒有直接的關系,這個轉換由操作系統完成並維護,與你的程序無關。
特殊地某些地址,比如說中斷向量地址,再比如說串口等物理端口地址這些是由硬件決定的,你的變量如果映射到這些的話返回的就是物理地址
有關
虛擬地址、邏輯地址、線性地址、物理地址的區別(這篇簡書中有提到)
作者:vbuer
鏈接:https://www.jianshu.com/p/42a4c21bcef4
來源:簡書
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。
- 虛擬地址:指的是由程序產生的由段選擇符和段內偏移地址兩個部分組成的地址。為什么叫它是虛擬的地址呢?因為這兩部分組成的地址並沒有直接訪問物理內存,而是要通過分段地址的變換機構處理或映射后才會對應到相應的物理內存地址。
- 邏輯地址:指由程序產生的與段相關的偏移地址部分。不過有些資料是直接把邏輯地址當成虛擬地址,兩者並沒有明確的界限。
- 線性地址:指的是虛擬地址到物理地址變換之間的中間層,是處理器可尋指的內存空間(稱為線性地址空間)中的地址。程序代碼會產生邏輯地址,或者說是段中的偏移地址,加上相應段的基地址就生成了一個線性地址。如果啟用了分頁機制,那么線性地址可以再經過變換產生物理地址。若是沒有采用分頁機制,那么線性地址就是物理地址。
- 物理地址:指的是現在CPU外部地址總線上的尋址物理內存的地址信號,是地址變換的最終結果。