首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >64位内存泄漏导致OutOfMemoryException的时间比32位长吗?

64位内存泄漏导致OutOfMemoryException的时间比32位长吗?
EN

Stack Overflow用户
提问于 2014-01-08 15:42:03
回答 3查看 480关注 0票数 2

在跟踪我正在处理的项目中的一些内存泄漏的过程中,我还一直在更新各种硬件API库。其中有两个是非托管32位库,这迫使我们的应用程序编译为x86;这本身并不是一个问题。我正在努力将这些库升级到64位版本,这样我们的应用程序就不必在32位内运行,但这让我对内存泄漏和可寻址内存空间产生了疑问。

如果内存泄漏,当在64位进程中运行时,理论上应用程序能够在访问OutOfMemoryException之前运行更长时间吗?至少有两件这样的案子

  • 内存碎片-没有一个连续的内存块来分配一个大对象,所以即使看起来有足够的空闲内存,也可以抛出这个异常。
  • 低物理内存--根本就没有足够的内存分配一个新的对象
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-01-08 15:55:36

当然要花更长的时间。

然而,取决于您的机器和泄漏过程,多长时间可以不同.

虽然x64可以允许内存的8TB,但您的机器很可能不允许这样做。假设您有4GB of ram和一个12 4GB页面文件,那么您可能有~14 4GB的内存可供分配。(系统有一些开销,防止了整个16 has的)

有关更多信息,请查看此post

票数 1
EN

Stack Overflow用户

发布于 2014-01-08 15:53:43

如果您在32位进程中没有地址空间,那么移动到64位进程将允许您运行更长时间。在耗尽地址空间之前,系统可能会耗尽页表资源。

如果页面文件中没有空间,那么无论是32位还是64位,您的进程都有相同数量的可用内存。在这种情况下,由于64位进程需要更多内存(8字节指针),因此它实际上会比32位版本的同一进程更快地耗尽内存。

票数 1
EN

Stack Overflow用户

发布于 2014-01-08 15:47:18

当然会的。在x86系统上,只有大约2GB的内存可供应用程序使用。当你泄露所有信息时,不管你有多少物理内存或者其他内存,你都完成了。

在x64上,它可以长时间运行,首先耗尽交换文件,然后使系统完全停止。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21000107

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档