什么决定了进程可用的虚拟地址空间大小?

4

进程可用的虚拟地址空间有哪些限制?

这是由以下因素决定的:

  1. 32位 vs 64位地址总线?

  2. 32位 vs 64位处理器?

  3. 可用的二级存储器?

  4. 配置的最大交换空间?

谢谢!


你可能想看看这里的答案:http://www.unix.com/programming/87988-find-virtual-address-space-size-process.html - James Black
1个回答

7
次要存储器/交换空间与此无关,因为页面可以映射到您的地址空间而不被分配。同一页可以映射到多个虚拟地址。 ([编辑]这是默认行为,但vm.overcommit_memory sysctl设置可用于防止映射VM页面,对于其中没有可用RAM或交换空间。搜索该sysctl设置以获取更多信息。)
CPU确实设定了上限,这基本上是64位系统上唯一的限制。请注意,当前x86_64处理器实际上不允许您使用整个64位空间
在32位Linux上,情况变得更加复杂。旧版Linux为每个进程保留了2GB的虚拟空间用于内核;新版则保留了1GB。(如果我没记错的话。我相信这些在内核编译时是可配置的。)无论您是否认为该空间“对进程可用”都是语义问题。
Linux还具有每个进程资源限制RLIMIT_AS,可通过setrlimitgetrlimit访问。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接