在追踪我正在进行的项目中的一些内存泄漏的过程中,我一直在努力更新各种硬件API库。其中一些是非托管的32位库,它们迫使我们的应用程序编译为x86;这本身并不是问题。我正在努力将这些库升级到64位版本,以便我们的应用程序不必以32位运行,但它让我想知道内存泄漏和可寻址的内存空间。
鉴于内存泄漏,当在64位进程中运行时,理论上应用程序是否能够在命中OutOfMemoryException
之前运行更长时间?这个
内存碎片 - 没有连续的内存块来分配大对象,因此即使看上去有足够的可用内存,也可能抛出此异常
低物理内存 - 没有足够的可用内存,连续或不连续,无法分配新对象
答案 0 :(得分:1)
如果在32位进程中耗尽地址空间,那么转移到64位进程将允许您运行更长时间。在耗尽地址空间之前,系统可能会耗尽页面表资源。
如果页面文件中没有空间,那么无论是32位还是64位,您的进程都将具有相同的可用内存量。在这种情况下,由于64位进程需要更多内存用于同一事物(8字节指针),因此它实际上将比同一进程的32位版本更早耗尽内存。< / p>
答案 1 :(得分:1)
绝对需要更长时间......
但是,根据您的机器和泄漏过程,多长时间会有所不同......
虽然x64可以允许 8TB 的内存,但您的机器很可能不允许这样做。因此,假设你有 4GB 的ram和 12GB 页面文件,那么你可能有〜14GB 的内存供你分配。 (系统有一些开销阻止完整的 16GB )
有关详细信息,请查看此post。
答案 2 :(得分:0)
当然会的。在x86系统上,您只有大约2GB的内存可供您的应用使用。当你全部泄漏时,无论你拥有多少物理或其他RAM,你都已经完成了。
在x64上,它可以运行很长时间,首先耗尽交换文件,然后使系统完全停止。