【问题标题】:Virtual memory size虚拟内存大小
【发布时间】:2011-03-25 08:18:43
【问题描述】:

我在 windows xp 上将虚拟内存大小设置为 756 MB。但是在 msdn 上阅读时,它说 32 位操作系统上每个进程的虚拟内存默认为 4 GB。它与我设置的虚拟内存大小有何不同?

**Memory**      **range**                    **Usage**
Low 2GB (0x00000000 through 0x7FFFFFFF)  Used by the process.
High 2GB (0x80000000 through 0xFFFFFFFF)    Used by the system.

另外,每个进程的范围如何相同?

【问题讨论】:

  • 属于 superuser.com
  • @Paul 不一定。这本质上是一个编程问题(即使是非程序员提出的)
  • 还有多少物理内存需要考虑。如果有 3.25 GB 的物理内存,那么将其与您的虚拟内存相结合得到 4 GB。
  • @Mike:我没有看到任何与编程相关的问题,即任何可以在编程上下文中回答的内容。在我看来,这更像是一个系统工程问题,即 VM 在 Windows 环境中如何工作。

标签: memory windows-xp virtual 32-bit


【解决方案1】:

windows中的虚拟内存设置只影响虚拟内存分页文件的大小,不影响分配给进程的虚拟内存的总大小。

【讨论】:

    【解决方案2】:

    您的页面文件设置为 756 Mb。页面文件就像额外的 RAM,但由磁盘支持。

    然而,虚拟内存是不同的,而且有点复杂。

    每个进程都有一个 4 Gb 的地址空间。这是一个 32 位指针的范围,所以效果很好。其中一半是为内核(操作系统)保留的,并且在每个进程中都是相同的。另一半用于流程本身,并且是该流程独有的。

    操作系统会根据进程的要求将“页面”分配给内存的私有部分。这些页面在进程的地址空间中获得一个插槽,这与它们在物理 RAM 中的位置无关。事实上,如果它们当前没有被使用,它们甚至可能不在 RAM 中。如果操作系统需要一些物理 RAM 用于其他用途,它会将页面“交换”到页面文件。

    要记住的重要一点是,您进程中的地址 0x10000 与另一个进程中的 0x10000 完全不同。

    幸运的是,操作系统会处理这一切,因此您不必这样做。

    【讨论】:

      【解决方案3】:

      这是一个太大的主题,无法在此处的答案中充分涵盖。您几乎肯定需要阅读一本书(我推荐 Jeffrey Richter 的此类主题的书籍)。

      4 Gb 是关于地址空间的。 756 Mb 是关于后备存储的。

      很多东西(尤其是可执行文件的内容)使用地址空间而不使用后备存储。当您执行一个程序时,该程序的可执行文件(以及它使用的所有 DLL)被映射到地址空间。然后,在逐页的基础上,根据需要将该可执行文件的各个部分放入物理内存中。

      756 Mb 是用于“扩展”RAM 空间的额外存储空间——但这通常仅用于数据,而不用于代码;代码已经存储在可执行文件中,因此系统在需要时直接从可执行文件中读取数据。 756 Mb 主要用于您在计算机运行时创建或修改的数据(尽管“修改/创建”的定义可能很模糊——例如,您已加载的网页的内容将包括在内)因为你让它进入内存,即使你根本没有创建或更改它)。

      【讨论】:

        猜你喜欢
        • 2016-09-26
        • 2018-07-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-07-14
        • 2020-09-01
        • 2013-01-13
        • 2012-07-03
        相关资源
        最近更新 更多