簡體   English   中英

是否可以使用C編程訪問物理內存地址?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM