Memory leaks 小内存泄漏是否还重要?

Memory leaks 小内存泄漏是否还重要?,memory-leaks,Memory Leaks,现在所有PC上的RAM通常都在千兆字节左右,我是否应该花时间查找程序中可能存在的所有小的(非增长的)内存泄漏?我说的是那些可能小于64字节的洞,甚至是一堆只有4字节的洞 其中一些很难识别,因为它们不在我自己的代码中,但可能在第三方代码或开发工具的代码中,我甚至可能无法直接访问源代码。在这些情况下,需要与这些产品的供应商进行长时间的沟通 我在这里看到了SO的头号内存泄漏问题:到目前为止,这个问题的头号答案是:不 但这里我说的是一些小的漏洞,可能需要大量的调试、研究和沟通才能找到 我只是说一个简单的

现在所有PC上的RAM通常都在千兆字节左右,我是否应该花时间查找程序中可能存在的所有小的(非增长的)内存泄漏?我说的是那些可能小于64字节的洞,甚至是一堆只有4字节的洞

其中一些很难识别,因为它们不在我自己的代码中,但可能在第三方代码或开发工具的代码中,我甚至可能无法直接访问源代码。在这些情况下,需要与这些产品的供应商进行长时间的沟通

我在这里看到了SO的头号内存泄漏问题:到目前为止,这个问题的头号答案是:不

但这里我说的是一些小的漏洞,可能需要大量的调试、研究和沟通才能找到

我只是说一个简单的桌面应用。我知道在服务器上运行的应用程序必须尽可能紧密

所以我真正要问的问题是,如果我知道我有一个程序泄漏,比如说每次运行40字节,这有关系吗


(来源:)


另见我的后续问题:


附言:我刚为我的程序开发购买了

我发现,作为《尤里卡洛格》(EurekaLog)(谁应该知道这些事情)的作者,关于捕捉内存泄漏。在那篇文章中,亚历山大非常简洁地回答了我的问题:

虽然应用程序中的任何错误都是不好的,但也存在一些类型的错误,这些错误在某些环境中是不可见的。例如,错误在客户端机器和服务器上相对无害


是的,这很重要。每一个小漏洞加起来

首先,如果您的泄漏代码是在重复使用的环境中使用的,并且每次都会泄漏一点,那么这些泄漏的代码就会累积起来。即使泄漏很小,而且很少发生,这些东西在很长一段时间内也会累积到相当大的数量

第二。。。如果您编写的代码存在内存泄漏,则该代码存在问题。我并不是说好的代码不会不时出现内存泄漏,但它们的存在意味着存在一些严重的问题。很多很多安全漏洞都是由于这种疏忽造成的(无界字符串复制,有人吗?)


底线是,如果你知道它,但不尽全力去追踪和修复它,那么你就是在制造问题。

是的。泄漏很重要。如果你的应用程序运行24x7x365,每秒处理数千个事务,那么几个字节会迅速变成千兆字节。

这取决于你的应用程序的性质。我主要处理网站和web应用程序。因此,根据大多数定义,我的应用程序每个请求“运行”一次。在高容量站点上,每个请求泄漏几个字节的代码可能是灾难性的。根据经验,我们有一些代码在每个请求中泄漏了几kb。总的来说,这导致我们的web服务器工作进程频繁重启,导致一天中几分钟的停机


但是web应用程序(以及许多其他类型的应用程序)的生命周期是无限的——它们永远持续运行。应用程序的寿命越短越好。如果应用程序的每个会话都有一个有限且可合理预测的端点,那么您当然可以容忍一定量的泄漏。这一切都是关于投资回报率的。

我和你在同一条船上。我有一些小的内存泄漏,而且永远不会增长。大多数泄漏是由于不正确地拆除COM对象造成的。我已经研究了漏洞,并逐渐意识到修复漏洞的时间和金钱与漏洞造成的损害不成比例。Windows大部分时间都在清理,因此只有当用户运行计算机多年而没有重新启动时,才会意识到真正的损坏

我认为把
留在泄漏处是可以接受的。这听起来很忌讳,但如果漏洞永远不会扩大,而且规模很小,那么在更大的范围内,它就无关紧要了。

漏洞就是漏洞

你可能还有其他的bug

当你发布一个产品时,你发布的是已知的bug。当您选择“修复”与“附带”哪些(已知)缺陷时,您是根据修复成本和风险与客户利益进行选择的

泄漏也不例外。如果是在非服务器应用程序(例如,运行数分钟或数小时然后关闭的应用程序)中的不频繁操作期间发生的小泄漏,则可能与任何其他错误一样“正常”


事实上,泄漏在一个重要方面可能有点不同,那就是如果你要提供一个库/API,你真的应该修复它们,因为客户的利益是巨大的(否则,你的所有客户都会“继承”你的泄漏,并且会像你现在必须与第三方供应商交谈一样给你打电话).

虽然我同意每一个小漏洞都会累加起来,但我并不认为解决它总是最好的商业决策

如果您有一个无状态遗留系统,并且没有理解它的编码人员,该怎么办?现在你在一个需要扩展的情况下使用它。。。而且,在内存耗尽之前生成一个新实例并将其交换掉,成本要低100倍

或者,假设您有一个全天候运行的批处理系统,但没有真正的用户。如果监视内存并告诉系统定期重启更便宜,为什么要查找泄漏


我认为你应该尽最大努力,但在决定的商业后果上要务实

不,这不重要,但是,只有当正如您所指出的那样,内存泄漏不能重复。内存泄漏不会随着程序的进展而增加,这通常是正常的。当进程终止时,非增长内存泄漏最终将得到解决

然而,很难证明观察到的内存泄漏没有增加;你有足够的经验数据。实际上,许多大型程序(甚至