【问题标题】:How much memory can x64 process can take on 4GB RAMx64 进程在 4GB RAM 上可以占用多少内存
【发布时间】:2012-07-02 22:24:12
【问题描述】:

我有一个 x64 应用程序。这是一个有点繁重的应用程序(在线程数、所需内存等方面)。我在 4GB RAM 64 位 Windows7 四核机器上运行此应用程序。但我注意到的是,在我的应用程序占用大约 2.2-2.3 GB 内存后它崩溃了。这是必需的行为吗?最大 64 位应用程序能否从 4GB RAM 中仅占用 2.3-2.4 GB RAM?

【问题讨论】:

    标签: c++ windows memory-management 64-bit


    【解决方案1】:

    RAM 的数量无关紧要,进程分配虚拟内存。您可以在 64 位进程中分配的虚拟内存量仅受操作系统提供将虚拟内存映射到 RAM 的页面的能力的限制。假设您没有使用 CreateFileMapping() 创建自己的映射,这通常仅受允许的最大分页文件的限制。这是一个系统设置,控制面板+系统+高级。 Windows 版本也有上限,Windows 7 Home Premium 为 16 GB,Professional 及更高版本为 192 GB。

    RAM 仅在您的程序实际访问虚拟内存时使用。当内存尚未映射时,会产生页面错误。如果您在消耗所有可用页面之前分配和使用的内存远远超出 RAM 的数量,则 64 位进程通常会因这些页面错误而减速到爬网。

    由于您远远低于典型的最大页面文件大小,这肯定只是另一个普通的旧堆损坏错误。

    【讨论】:

      【解决方案2】:

      调试您的程序。崩溃不应该仅仅因为你分配了很多内存而发生。常见的疑点:数学溢出、内存损坏、未能处理来自内存分配例程的错误。

      【讨论】:

      • 如果没有捕获到产生的异常,分配失败肯定会使程序崩溃(这通常是这种情况,因为在许多情况下无论如何您都无法从中恢复,所以充其量可以缓存它,显示一些有关崩溃的信息(当你可能无法分配内存时这可能很难)然后退出)。
      【解决方案3】:

      不,首先检查您没有任何溢出或其他错误。即使是 32 位应用程序也可以寻址 - 使用更多 RAM,所以如果它仅限于 Windows 64 位,那就太荒谬了。

      剩余的内存可以免费使用吧?

      【讨论】:

      • 在 Windows 上,32 位进程实际上只能直接寻址 2GB 内存(除非设置了 IFLAA 位)——请参阅Memory limits on MSDN
      猜你喜欢
      • 2019-08-18
      • 2010-11-12
      • 2011-06-25
      • 1970-01-01
      • 1970-01-01
      • 2014-09-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多