在跟踪我正在处理的项目中的一些内存泄漏的过程中,我还一直在更新各种硬件API库。其中有两个是非托管32位库,这迫使我们的应用程序编译为x86;这本身并不是一个问题。我正在努力将这些库升级到64位版本,这样我们的应用程序就不必在32位内运行,但这让我对内存泄漏和可寻址内存空间产生了疑问。
如果内存泄漏,当在64位进程中运行时,理论上应用程序能够在访问OutOfMemoryException之前运行更长时间吗?至少有两件这样的案子
发布于 2014-01-08 15:55:36
当然要花更长的时间。
然而,取决于您的机器和泄漏过程,多长时间可以不同.
虽然x64可以允许内存的8TB,但您的机器很可能不允许这样做。假设您有4GB of ram和一个12 4GB页面文件,那么您可能有~14 4GB的内存可供分配。(系统有一些开销,防止了整个16 has的)
有关更多信息,请查看此post。
发布于 2014-01-08 15:53:43
如果您在32位进程中没有地址空间,那么移动到64位进程将允许您运行更长时间。在耗尽地址空间之前,系统可能会耗尽页表资源。
如果页面文件中没有空间,那么无论是32位还是64位,您的进程都有相同数量的可用内存。在这种情况下,由于64位进程需要更多内存(8字节指针),因此它实际上会比32位版本的同一进程更快地耗尽内存。
发布于 2014-01-08 15:47:18
当然会的。在x86系统上,只有大约2GB的内存可供应用程序使用。当你泄露所有信息时,不管你有多少物理内存或者其他内存,你都完成了。
在x64上,它可以长时间运行,首先耗尽交换文件,然后使系统完全停止。
https://stackoverflow.com/questions/21000107
复制相似问题