&符號取出的地址到底是什麼

&,取地址符號,可以獲得一個變量在內存中的存儲地址,但是獲得的地址有異同,有的是偏移地址,有的是全局虛擬地址。

1、對於棧中的變量來說,&地址取得的是變量的偏移地址:
測試程序:test.c
 
編譯後運行,結果如下:
 
查看test的maps文件得:
 
計算得到變量test的真實虛擬地址爲:0x7ffd8c365000 & 0xffff00000000 | 0x8c383bc8 = 0x7ffd8c383bc8
根據頁表映射機制,編寫內核模塊根據虛擬地址計算出真實的物理地址爲:
 
可得test變量的物理地址爲0x7ffd8c383bc8 & 0xfff | 0xa9a28000 = 0xa9a28bc8。
最後,查看系統內存,證實變量test的值:
 


2、對於靜態全局變量(位於數據段中)來說,&取得的是全局虛擬地址:
測試程序test.c
 
編譯後運行,結果如下:
 
查看test的maps文件得:
 
計算得到變量test的真實虛擬地址爲:0x601038.
根據頁表映射機制,編寫內核模塊根據虛擬地址計算出真實的物理地址爲:
 
可得test變量的物理地址爲0x601038 & 0xfff | 0xa6e7e000 = 0xa6e7e038。
最後,查看系統內存,證實變量test的值:
 
【備註】查看系統內存的開源工具鏈接爲:傳送門
發佈了42 篇原創文章 · 獲贊 6 · 訪問量 10萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章