什么决定了程序使用多少 RAM?

什么决定了程序使用多少 RAM?

以游戏为例 - 我可能正在玩一款占用 30GB 硬盘存储空间的游戏,但这款游戏可能只使用 2GB 内存。显然,游戏不会一次性加载,但 RAM 使用量是否等于从硬盘读取 + 使用的数据量?

tl;dr 为什么使用 2GB 内存的游戏实际上会使用 2GB 内存,决定因素是什么?

答案1

“RAM 使用量是否等于从 HDD 读取 + 使用的数据量?”不,事情没那么简单。当今的操作系统都使用虚拟内存。程序使用的 RAM 几乎总是程序定义的总虚拟地址空间的子集,原因有二。

首先,因为程序几乎永远不会访问它定义的所有 vas。例如,假设您从未探索过游戏关卡中的特定走廊 - 就没有理由从磁盘导入该数据。或者,如果您碰巧不使用 Word 中的编号列表功能,也没有理由导入该代码。代码和数据通常是“按需分页的”,这意味着只有在程序实际引用(“要求”)时才会分页。

其次,即使内容已被调入,操作系统也可能决定其他内容可以更好地利用部分 RAM,并将部分内容调出 - 特别是如果它已经有一段时间没有被引用,并且尤其是在 RAM 量较少的系统上(称为“RAM 压力”)。这也可以分别适用于代码和数据。一个简单的例子就是您有一段时间没去过的关卡的数据。

上述结论的结果是,程序“使用”的 RAM 量实际上最好被认为是程序最近引用的虚拟地址空间量,并受操作系统允许程序使用的内容限制。它可能因您拥有的 RAM 量、系统上运行的其他程序以及程序正在执行的操作而有很大差异。

总结:这很复杂。Windows 内部原理,第 6 版,大约 200 页,本身就是一本相当大的书。

答案2

实际上有几个因素。

  1. 最大允许值 - 操作系统具有非常复杂和精细的机制来控制 RAM 使用量。这些机制包括对任何给定应用程序使用的 RAM 量的限制。例如,Windows 限制取决于版本 (https://msdn.microsoft.com/en-us/library/windows/desktop/aa366778(v=vs.85).aspxhttps://msdn.microsoft.com/en-us/library/aa366778(VS.85).aspx
  2. 程序实际上在做什么。例如,Microsof Office 将比最新的 FPP 占用更少的内存,因为它必须保存更少的数据来进行渲染和计算。
  3. 程序的类型 - 如前所述:游戏使用大量 RAM,因为它必须存储各种图形数据(渲染、效果、计算等)。此外,显示质量也是一个重要因素。
  4. 实际硬件 - 如果系统有大量 RAM 用于图形(在图形适配器上),那么它将首先使用它,然后才使用 RAM 来保存实际应用程序文件和当前处理的数据。如果没有足够的 RAM,它将使用大量 RAM,直到达到极限。
  5. 游戏的实际文件夹大小主要是渲染和其他游戏数据 - 墙壁、风景、地形、武器特性、音效等,这些都已在前面描述过。可以把它想象成某种线框。当你玩电脑时,“仅”用纹理等填充数据 - 实际的墙壁。你选择的质量越高,系统将使用越多的处理能力和内存,如果不够,它就会很慢。这实际上也是每个阶段/任务/章节单独加载的原因 - 因为没有空间可以同时加载所有内容。

编辑:添加了另一个链接。

相关内容