【问题标题】:Out of memory - why does the system not page out not recently used?内存不足 - 为什么系统不分页最近未使用?
【发布时间】:2012-04-14 09:04:51
【问题描述】:

我有一个程序可以进行一些非常密集的图形工作,并且需要大量内存(> 8GB),但是我的机器目前只有 8GB 的​​ RAM,这意味着程序在内存不足时会抛出错误的分配.

除了这个程序之外,我还打开了一些其他的东西,占用了我的一些主内存,但大多数情况下只是程序吃掉了内存。

现在,我想知道为什么系统在内存使用量超过 8GB 时会抛出 bad_alloc,而不是出现页面错误并换出一些页面?这不是分页和虚拟内存应该解决的问题之一吗?

我应该能够运行需要> 8GB内存的程序,如果它只是分页出最近未访问的页面,以便能够为所需的内存创建新页面。

谁能解释一下?

我的机器有一个 8GB 的​​页面文件。

【问题讨论】:

  • 什么操作系统?什么过度使用设置?
  • 我有 Win7 Home Premium 64bit,我在哪里可以找到过度使用设置?
  • 这是一个用户程序,不是发帖者写的——建议转给超级用户?
  • @MartinBeckett,从程序员的角度来看,这也是一个有趣的问题。
  • @TonyTheLion - 是的,但如果你无法控制分配,你就无法真正修复它。可能有您可以更改的用户设置 - 超级用户是询问这些设置的最佳场所

标签: memory paging bad-alloc


【解决方案1】:

内存分配还有其他问题:

  1. 进程内存分配:进程必须向操作系统请求内存帧。可能是您已达到操作系统可以为您提供的最大大小
  2. 虚拟内存空间:在您的进程和程序中,您正在虚拟内存空间中工作。同样,正在运行的进程和/或程序可能无法扩展到超过 32 位

可能还有更多类似的问题我没有列出

【讨论】:

    【解决方案2】:

    什么操作系统?
    你总共有多少 ram+swap?

    您是否在运行一段时间后尝试分配一个连续的 8Gb 区域?一般是个坏主意

    How to solve Memory Fragmentation

    【讨论】:

    • 我有 8GB 物理内存和一个 8GB 交换文件
    • 我不太确定程序试图分配什么,它是一个进行高分辨率图像编辑的程序,所以如果它将这些加载到内存中,这将需要内存
    • @TonyTheLion - 我们假设您正在编写软件(这是如此),试图在一个只有 16Gb 的块中分配 8Gb 是行不通的。尝试增加交换文件的大小 - 很多
    猜你喜欢
    • 1970-01-01
    • 2018-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-01
    • 2019-08-20
    • 1970-01-01
    相关资源
    最近更新 更多