Image demonstrating the memory window while debugging 當在visual studio中使用內存窗口時,我們能看到該進程的虛擬地址還是RAM的物理地址?visual studio在調試時顯示虛擬或物理地址嗎?
回答
用戶級代碼總是看到虛擬地址。它沒有辦法知道目前對應於這些地址之一的什麼物理地址(如果有的話)。 「虛擬」是它生活的唯一世界,也是它唯一知道的世界。對於所有的程序意圖和目的,「虛擬是現實。」
澄清:所有操作系統(除了MS-DOS等...)在一個虛擬內存空間中運行的用戶程序。每個程序都有自己的感知,包括「位置$12345678
」,每個程序的感知是,正確。每個程序可以有不同的編號,並可以根據自己的喜好進行更改。
他們能做到這一點,因爲他們的沒有其實都知道:
- 凡在物理內存 「他們 '位置
$12345678
'」 實際上駐留。 (如果它......而且相當,可能不!) - 什麼是物理地址
$12345678
。
操作系統維護虛擬存儲器爲每個過程中,採用和物理-RAM的組合(如有必要)頁面文件和/或交換的文件空間。一個進程正在使用的信息「按需」提供給一個物理RAM位置,這個位置對於它來說都是未知的,並且它不知道。最近未被使用的信息最終從物理RAM「被盜」並移動到外部存儲器中,直到它再次被引用,從而觸發所謂的「頁面錯誤」。
由調試器給你的內存的觀點是,被感知的存儲視圖,這是正確的正在調試的程序:虛擬地址,在此過程中的虛擬內存。
進程的虛擬地址空間是否有最大限制?就像我們在linux上使用top命令一樣,它顯示了進程的物理內存和虛擬內存。 (它不斷變化)。一個進程的虛擬內存如何改變 –
應用程序認爲它有一定的大小的(虛擬)內存區域。它無法檢測到嘗試訪問任何特定位置是否會導致頁面錯誤。它只能通過系統調用從OS請求這些信息來預先確定其(虛擬)內存分配的大小。 –
你看到'top'命令不斷變化的原因是因爲它可以*看到操作系統的虛擬內存子系統的活動。它可以看到有多少物理*資源正在用於支持任何進程:當前的物理RAM佔用空間和每個使用的交換/頁面空間。它可以看到進程將會喜歡多少內存(它的所謂「工作集大小」),以及它實際獲得多少內存。它可以看到等待的時間。進程競爭物理RAM資源。物理情況不斷變化...每微秒。 –
- 1. 虛擬與物理地址
- 2. 函數指針:物理地址或虛擬地址
- 3. 內存與物理地址或虛擬地址合併?
- 4. 利用在Visual Studio調試器中看到的虛擬指針表地址
- 5. elf文件中段的虛擬地址和物理地址
- 6. 虛擬地址到物理地址映射
- 7. 虛擬地址到物理地址的轉換
- 8. 轉換邏輯(虛擬)地址到物理地址
- 9. 將虛擬地址映射到特定物理地址
- 10. malloc的返回值是虛擬地址還是物理地址?
- 11. 將物理地址映射到虛擬地址linux
- 12. C指針是指物理地址還是虛擬地址
- 13. 將Visual Studio本地IIS 7調試虛擬路徑設置爲/
- 14. 如何在物理鍵盤連接時顯示虛擬鍵盤
- 15. 在linux的sk_buff中,skb-> data是物理地址還是虛擬地址?
- 16. 虛擬地址
- 17. 在Visual Studio 2008中設置虛擬/本地測試服務器
- 18. 內核虛擬地址如何轉換爲物理RAM?
- 19. 解釋WEC7虛擬/物理地址空間
- 20. 緩存是由物理地址還是虛擬地址索引的?
- 21. 如何使用頁表來虛擬地址轉換爲物理地址
- 22. 什麼是物理地址和虛擬地址?他們是如何工作的?
- 23. 如何將物理地址映射到不同大小的虛擬地址?
- 24. 虛擬地址空間大小vs物理地址空間大小
- 25. 緩存查找決定是基於虛擬地址還是物理地址
- 26. 嘗試在顯示TOAST時調用虛擬方法?
- 27. Visual Studio調試器顯示內存地址而不是值的變量
- 28. ASP.NET核心的Visual Studio 2015年虛擬應用程序調試
- 29. 調試Visual Studio網站/ w嵌套虛擬文件夾
- 30. 的Visual Studio 2012的遠程調試內核虛擬機
我已經在問題中的鏈接分享圖像。你能對此有一個看法並且詳細闡述一下嗎? –