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的远程调试内核虚拟机
我已经在问题中的链接分享图像。你能对此有一个看法并且详细阐述一下吗? –