【问题标题】:How to force an application to use memory instead of the page file?如何强制应用程序使用内存而不是页面文件?
【发布时间】:2015-03-22 22:28:26
【问题描述】:

我不确定这是否是一个正确的问题,但有没有办法“强制”应用程序使用物理内存而不是页面文件?

更准确地说:我编写了一个应用程序 (C++) 来分析一些测量数据。因此,它需要分配一个相当大的数组,使进程使用大约 12 GB 的 RAM。我确实安装了 16 GB,所以这应该不是太大的问题。我启动了程序,它填满了我的 RAM(直到剩下大约 1GB)。我确实继续使用我的笔记本电脑一段时间,然后让它运行一夜。 早上看我的程序,它只完成了大约 25%,而在那之后它实际上应该超过 80%。查看任务管理器,我可以看到,它只使用了大约 1.8 GB 的 RAM,而不是之前使用的 12 GB。所谓的“提交”是用 23 / 31.9 GB 填充的。

所以,我的物理内存似乎几乎是空的(有超过 12 GB 可用)并且程序继续运行非常缓慢。如果这甚至是它运行缓慢的原因:有没有办法强制它使用物理内存? 此外,.exe 在任务管理器中显示为“后台服务”。启动新实例时,它显示为应用程序。这会导致内存限制吗?

编辑:在 Windows 8.1 x64 上运行。

【问题讨论】:

  • 它通常取决于操作系统。您应该添加一个特定于操作系统的标签。
  • 蛮力的方法是减少系统设置中的虚拟内存......并希望“其余部分”仍然正常工作:-)
  • 如果程序实际上并未访问相关页面,就会发生这种情况。除非您看到很多寻呼活动,否则我认为您是在找错树。
  • 您需要分配非分页内存。看这里:stackoverflow.com/questions/17892358/…
  • 您还应该检查电源管理设置; Windows 可能已决定通过降低 CPU 速度来节省电量。

标签: c++ memory memory-management windows-8.1


【解决方案1】:

BYTE* buf = (BYTE*)GlobalAlloc(GMEM_FIXED | GMEM_ZEROINIT, size_buffer);

【讨论】:

  • 欢迎来到 Stack Overflow!虽然这段代码可以解决问题,including an explanation 解决问题的方式和原因确实有助于提高帖子的质量,并可能导致更多的赞成票。请记住,您正在为将来的读者回答问题,而不仅仅是现在提出问题的人。请edit您的回答添加解释并说明适用的限制和假设。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-02
  • 2015-11-06
  • 2012-11-14
  • 2013-03-12
  • 1970-01-01
  • 2018-05-22
相关资源
最近更新 更多