关于 .net:64 位的内存泄漏是否需要比 32 位更长的时间才能导致 OutOfMemoryException | 珊瑚贝

Does a memory leak in 64 bit take longer to cause an OutOfMemoryException than 32 bit


在跟踪我正在处理的项目中的一些内存泄漏的过程中,我还一直在努力更新各种硬件 API 库。其中一些是非托管的 32 位库,它们强制我们的应用程序编译为 x86;这本身不是问题。我正在努力将这些库升级到 64 位版本,以便我们的应用程序不必以 32 位运行,但这让我想知道内存泄漏和可寻址内存空间。

鉴于内存泄漏,在 64 位进程中运行时,应用程序理论上是否能够在遇到 OutOfMemoryException 之前运行更长的时间?这个

至少有两种情况

  • 内存碎片 – 没有连续的内存块来分配大对象,因此即使似乎有足够的可用内存也可能会引发此异常

  • 低物理内存 – 根本没有足够的可用内存(无论是否连续)来分配新对象

  • 我会说不,只要内存总量相同。可能存在开销差异。
  • 与 32 位进程相比,64 位进程的地址空间很大,因此您可以在遇到问题之前分配更多。
  • 对@BartFriederichs 评论的支持告诉我们,您实际上根本不知道 Windows 是如何管理内存的。物理内存总量与每个应用程序实际寻址和”使用”多少内存没有任何关系。


绝对会花更长的时间…

但是,根据您的机器和泄漏过程,多长时间会有所不同…

虽然 x64 可以支持 8TB 的内存,但您的计算机很可能不允许这样做。因此,假设您有 4GB 的内存和 12GB 的页面文件,那么您可能有大约 14GB 的内存可供分配。 (系统有一些开销阻止了完整的 16GB)

查看这篇文章了解更多信息。

  • 感谢您的链接。在大多数情况下,按理说额外的内存空间会延迟最终的异常。我发帖是想看看人们在这种情况下有什么想法或经历,当然我希望消除所有的内存泄漏;这并不总是那么容易,我必须分阶段进行。


如果您在 32 位进程中耗尽了地址空间,那么迁移到 64 位进程将使您运行更长的时间。在您耗尽地址空间之前,系统可能会用完页表资源。

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

  • 好的一点是,64 位进程与 32 位进程中可用的内存量相同。


当然会。在 x86 系统上,您只有大约 2GB 的内存可供您的应用程序使用。当您全部泄漏时,您就完成了,无论您拥有多少物理或其他 RAM。

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


来源:https://www.codenong.com/21000107/

微信公众号
手机浏览(小程序)

Warning: get_headers(): SSL operation failed with code 1. OpenSSL Error messages: error:14090086:SSL routines:ssl3_get_server_certificate:certificate verify failed in /mydata/web/wwwshanhubei/web/wp-content/themes/shanhuke/single.php on line 57

Warning: get_headers(): Failed to enable crypto in /mydata/web/wwwshanhubei/web/wp-content/themes/shanhuke/single.php on line 57

Warning: get_headers(https://static.shanhubei.com/qrcode/qrcode_viewid_9863.jpg): failed to open stream: operation failed in /mydata/web/wwwshanhubei/web/wp-content/themes/shanhuke/single.php on line 57
0
分享到:
没有账号? 忘记密码?