2012-05-16 88 views
3

我知道有兩種類型的地址。虛擬和物理。打印一個整數變量的地址將打印它的虛擬地址。是否有一個函數可以幫助打印該變量的物理內存?C內存映射

虛擬內存是指硬盤上被操作系統視爲內存的部分嗎?

+0

是的,沒有。不需要太多的努力來解釋。從維基百科開始,男人。 http://en.wikipedia.org/wiki/Virtual_memory –

+0

這個問題([鏈接](http://stackoverflow.com/q/6245850/335858))是相關的,雖然它不是一個完全重複的。 – dasblinkenlight

回答

7

不,沒有這樣的(便攜式)功能。在實現內存保護的現代操作系統中,用戶空間(而不是內核空間,即操作系統的一部分)不能直接訪問物理地址,這是不允許的。所以沒有什麼意義。

不,虛擬內存不需要涉及硬盤,即「交換」或「分頁」。一旦你擁有虛擬內存,你就可以實現它,因爲它可以讓操作系統有機會介入和管理物理內存中的哪些頁面,從而可以將內存「分頁」到其他存儲介質。

要深入瞭解Linux內核如何管理內存,this blog post是太棒了。

+0

物理地址不能簡單地獲得,因爲它不是恆定的,不僅因爲它從用戶模式進程中「隱藏」。除非內存頁面被鎖定在指定的物理地址,否則它可能隨時移動到任何地方(包括HDD)。 – valdo

+0

我會這樣說。分頁/交換文件是操作系統將硬盤視爲RAM的區域。還有一個問題。我們可以獲得特定用戶進程的頁表大小嗎?我知道頁表的大小不是恆定的。但是,在某些時候,如果我想,是否有可能? – divakar

2

這是一個複雜的課題。

物理內存地址指向硬件內存設備中的實際位置,無論是系統內存,圖形卡內存還是網卡緩衝區。

虛擬內存是呈現給用戶模式進程的內存模型。系統上的大多數設備都有一些映射到它們的虛擬內存地址空間,處理器可以寫入。當這些物理內存地址被賦予虛擬內存地址時,操作系統識別出對這些地址的讀/寫請求需要由特定設備提供服務,並將該請求委託給它。