【问题标题】:Does visual studio show virtual or physical address while debugging?Visual Studio 在调试时会显示虚拟地址还是物理地址?
【发布时间】:2016-11-08 17:47:34
【问题描述】:

Image demonstrating the memory window while debugging 在 Visual Studio 中使用内存窗口时,我们看到的是该进程的虚拟地址还是 RAM 的物理地址?

【问题讨论】:

    标签: debugging memory virtual


    【解决方案1】:

    澄清一下:所有操作系统(除了 MS-DOS 等...)在虚拟内存空间中运行用户程序。每个程序对“位置$12345678 包含的内容”都有自己的感知,并且每个程序的感知对它来说都是正确的。每个程序都可以有不同的编号,并且可以随意更改。

    他们可以这样做是因为没有他们实际上知道:

    • 物理内存中,“他们的'位置$12345678'”实际驻留。 如果确实如此......而且很可能不会!)
    • 物理地址$12345678中有什么。

    操作系统为每个进程维护虚拟内存,使用物理RAM和(如果需要)页面文件和/或交换文件空间的组合。进程正在积极使用的信息“按需”提供给它,位于它不知道和不知道可能的物理 RAM 位置。最近未使用的信息最终会从物理 RAM 中“窃取”并移至外部存储……直到再次被引用,从而触发所谓的“页面错误”。

    调试器提供给您的内存视图是被调试程序感知的并且对被调试程序正确的内存视图:虚拟地址,在进程的虚拟 内存。

    【讨论】:

    • 进程的虚拟地址空间有最大限制吗?就像我们在linux上使用top命令一样。它显示了一个进程的物理内存和虚拟内存。 (不断变化)。进程的虚拟内存如何变化
    • 应用程序感知到它有一个特定大小的(虚拟)内存区域可供使用。它无法检测到尝试访问任何特定位置是否会导致页面错误。它只能通过系统调用从操作系统请求此信息来预先确定其(虚拟)内存分配的大小。
    • 您从top 命令看到不断变化的值的原因是因为它可以看到操作系统的虚拟内存子系统的活动。它可以查看当前用于支持任何进程的 物理 资源:当前物理 RAM 占用空间和每个进程使用的交换/页面空间。它可以查看进程希望拥有多少 RAM(其所谓的“工作集大小”),以及它实际获得多少 RAM。它可以看到等待的时间。进程竞争物理 RAM 资源。身体状况不断变化……每微秒。
    【解决方案2】:

    用户级代码总是看到虚拟地址。它无法知道当前哪个物理地址(如果有!) 对应于这些地址之一。 “虚拟”是它唯一存在的世界,也是它唯一知道的世界。就程序的所有意图和目的而言,“虚拟就是现实。”

    【讨论】:

    • 我已在问题链接中分享了图片。能不能简单介绍一下?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-06-20
    • 2015-05-04
    • 2013-05-05
    • 1970-01-01
    • 1970-01-01
    • 2012-05-16
    • 1970-01-01
    相关资源
    最近更新 更多