[英]Is it possible to access a physical memory address using C programming?
例如,當我們寫:
int a;
並且做&a
給我們一些十六進制形式的地址0x12345678
,我們稱之為虛擬地址。
現在,當我們嘗試做
int *temp = 0xfe000000;
此地址的作用類似於虛擬地址還是物理地址? 據我所知,OS提供的虛擬地址由MMU進一步轉換為物理地址。
據我所知,在兩者之間發生分頁機制,將虛擬地址映射到可用的物理地址。 當我們給指針一個地址時會發生什么? 該地址是否像虛擬地址一樣,然后由MMU處理以指向特定的物理地址,或者它本身就像物理地址一樣?
int temp;
printf("%x \n", &temp);
int *temp2 = 0xfe000000; //This is just an example address. It could be any address
此地址(0xfe000000)的作用是真實的物理地址還是虛擬地址?
如果您使用的是操作系統,則無法使用操作系統,因為操作系統使用的是虛擬地址,您使用的任何內容都將通過虛擬地址映射到物理地址。
但是,如果您正在編程微控制器,那么沒有虛擬地址,您可以使用C中的指針訪問物理內存位置。
我們通常得到的地址,例如,PC中C編程中的指針是虛擬地址 。 虛擬到物理映射,反之亦然,由內部操作系統處理。 通常,用戶(root或其他)在地址映射中沒有發言權。
另一方面,簡單的微控制器通常沒有TLB映射,因此您訪問的地址是設備的實際物理地址,如其他答案中所述。
此外,如果您計划從頭開始使用微處理器,您始終可以擁有自己的物理到虛擬地址映射,您甚至可以在地址塊中設置屬性。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.