首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >虚拟内存大小

虚拟内存大小
EN

Stack Overflow用户
提问于 2010-08-04 23:38:12
回答 3查看 1.1K关注 0票数 2

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

代码语言:javascript
复制
**Memory**      **range**                    **Usage**
Low 2GB (0x00000000 through 0x7FFFFFFF)  Used by the process.
High 2GB (0x80000000 through 0xFFFFFFFF)    Used by the system.

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-08-04 23:43:02

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

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

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

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

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

幸运的是,操作系统可以处理所有这些问题,所以您不必这样做。

票数 3
EN

Stack Overflow用户

发布于 2010-08-04 23:49:44

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

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

相当多的东西(特别是可执行文件的内容)使用地址空间,而不使用后备存储。执行程序时,该程序的可执行文件(及其使用的所有DLL)将映射到地址空间。然后,在逐页的基础上,根据需要将该可执行文件的片段放入物理内存中。

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

票数 2
EN

Stack Overflow用户

发布于 2010-08-04 23:41:28

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3407199

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档