Memory 既然现代计算机使用虚拟内存,为什么我们还会遇到“虚拟内存”;“内存不足”;问题

Memory 既然现代计算机使用虚拟内存,为什么我们还会遇到“虚拟内存”;“内存不足”;问题,memory,virtual-memory,Memory,Virtual Memory,我正在学习虚拟内存的概念,但这个问题让我困惑了一段时间。由于大多数现代计算机使用虚拟内存,当程序执行时,操作系统应该在RAM和磁盘之间对数据进行分页。但为什么我们仍然会遇到“内存不足”的问题?如果我误解了这个概念,你能纠正我吗?我真的很感谢你的解释 PS:例如,我在计算集群上分析模拟输出的大量数据(>100G),并将数据读入C数组。系统经常崩溃并抱怨内存错误。首先:现代计算机确实使用虚拟内存,但这里没有魔力。记忆不是凭空产生的。虚拟内存方案通常允许使用大容量存储子系统(也称为硬盘)的一部分来保存

我正在学习虚拟内存的概念,但这个问题让我困惑了一段时间。由于大多数现代计算机使用虚拟内存,当程序执行时,操作系统应该在RAM和磁盘之间对数据进行分页。但为什么我们仍然会遇到“内存不足”的问题?如果我误解了这个概念,你能纠正我吗?我真的很感谢你的解释


PS:例如,我在计算集群上分析模拟输出的大量数据(>100G),并将数据读入C数组。系统经常崩溃并抱怨内存错误。

首先:现代计算机确实使用虚拟内存,但这里没有魔力。记忆不是凭空产生的。虚拟内存方案通常允许使用大容量存储子系统(也称为硬盘)的一部分来保存(希望)使用频率较低的进程部分

这种技术允许进程使用比RAM更多的内存。然而,没有什么是无限的。最终,所有RAM和硬盘驱动器资源都将耗尽,进程将出现内存不足错误


第二:操作系统对进程可能使用的内存设置上限并非闻所未闻。点击该上限,进程将再次出现内存不足错误。

即使使用虚拟内存,可用内存也不是无限的

限制1)架构限制。处理器和操作系统将设置一些最大虚拟内存限制

限制2)系统参数。许多操作系统配置最大虚拟内存大小

限制3)进程配额。许多操作系统都有限制最大虚拟内存大小的进程配额


限制4)系统资源。值得注意的是页面文件空间。

即使磁盘空间和RAM无限,地址空间也是有限的。@Peter非常感谢您的解释。我想第二种情况可以解释我的情况。@Raymond,你能详细说明一下吗?为什么即使磁盘空间无限,地址空间也总是有限的?谢谢让我们以一台较旧的32位机器为例。通常,在这样的机器上,虚拟地址空间被限制为不超过2^32字节或大约4GB。现代机器使用64位寻址,因此理论上可以处理2^64或180亿字节。实际上,机器的寻址限制为40到48位。40位产生约1000GB,而48位则是256倍。在任何一种情况下,您都会看到磁盘空间或磁盘配额或交换程序空间限制。ps:我认为你的答案在于修改你的程序以使用更少的内存。pps x^y表示x乘以y的幂。