【问题标题】:Is there a way to borrow hard drive memory as needed?有没有办法根据需要借用硬盘内存?
【发布时间】:2012-12-15 07:29:33
【问题描述】:

这可能是一个愚蠢的问题,但是,例如,如果我正在使用非常大的阵列,在我的 2GB 计算机上占用 2.1GB 的 RAM,有没有办法借用额外的根据需要从我的硬盘驱动器中提取 0.1GB?

【问题讨论】:

  • 什么操作系统?在类 Linux 系统中,这是交换空间的用途。
  • 这是一个操作系统级别的问题,大多数操作系统都有自动执行此操作的方法。
  • 这不是一个愚蠢的问题;这是一个优秀的想法。这就是我们的祖先在 1960 年代在操作系统中实现它的原因!阅读有关 virtual memorypaging 的信息。

标签: python memory computer-science


【解决方案1】:

您的操作系统已经这样做了(Windows、*nix)。它被称为Virtual Memory

【讨论】:

  • 虚拟内存是一个更广泛的概念,它也使许多其他事情成为可能(解决物理内存碎片、内存映射文件等)。借用硬盘空间的特定过程称为交换。
【解决方案2】:

是的。它是virtual memory 的一部分,特别是交换。大多数现代操作系统都可以做到这一点,而程序员不必担心。

当物理 RAM 耗尽时,硬盘将用作额外内存。这非常很慢,因为硬盘的访问时间(毫秒)比 DRAM 的访问时间(纳秒)要慢一百万倍。

如果可能,建议增加 RAM。

【讨论】:

  • 请注意,即使使用交换,也可能会遇到虚拟内存空间问题,例如在流行的 32 位操作系统上,您无法访问超过 4GB(或更少)的虚拟内存空间(无论它是否映射到 RAM),没有一些严重的诡计。
  • 另外,您实际上拥有的可用地址空间少于 4 GiB。这在 Windows 上尤其糟糕,默认情况下您只能获得 2 GB 的虚拟地址(其余部分为系统保留)。见msdn.microsoft.com/en-us/library/windows/desktop/…
  • 它是否慢取决于使用模式。如果您需要随机访问比 RAM 大得多的数据集,那么您将主要以磁盘速度运行,这很糟糕。如果数据集只比 RAM 稍大一点,那么大多数访问将访问仍在 RAM 中的数据,因此减速会小得多。
  • @delnan:这仅适用于 32 位 Windows;在 64 位 Windows 上运行的 64 位应用程序没有 2GB 的限制。
  • @KenWhite 是的,应该提到。在 64 位 Windows 上运行的 32 位二进制文​​件也可以获得 4GB 的地址空间,如果使用不起眼的工具进行处理。
【解决方案3】:

正如其他人所说,是的,系统已经拥有虚拟内存。

但是,您可以通过其他方式利用这一点。您可以使用memory mapped files 让系统直接将数组映射到磁盘。

在写入内存(数组)时以这种方式使用它,系统将使用它的虚拟内存管理系统来使用磁盘。您可能会问,这与操作系统将执行的标准 VMM 有何不同?好处是它不会使用标准交换空间(Windows 中的页面文件),因此空间是“内存”,可供系统的其余部分使用。

你仍然有大量的资源使用,但你可以通过释放交换空间获得收益,实际上是借用更多的虚拟内存。您获得的另一个优点是没有数据重复。 IE。如果您正在加载大型数据集,那么您只需将磁盘空间映射到内存,反之亦然以进行写入。

【讨论】:

    猜你喜欢
    • 2018-10-27
    • 2013-12-12
    • 1970-01-01
    • 2013-06-25
    • 2021-04-10
    • 2022-10-07
    • 2018-04-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多