首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >术语:内存泄漏

术语:内存泄漏
EN

Software Engineering用户
提问于 2011-09-17 00:36:21
回答 5查看 890关注 0票数 5

当我听到“内存泄漏”这个术语时,我指的是程序中的一个bug,除了它没有释放内存资源,如果它持续释放内存资源,它就会消耗大量的内存,损害系统性能,在最坏的情况下会导致程序崩溃(或者其他程序,如果操作系统决定杀死这个程序的话)。

但是现在在这个问题的评论部分,我想到的是这个词的全部含义。我以前经常看到它在这个意义上的使用。

https://stackoverflow.com/questions/7451437/is-this-a-mem-leak-in-main

那么,你会把一个简单的内存泄漏称为一种简单的内存泄漏,它会使一个程序因其他副作用而崩溃,还是因为不释放一个锁而导致一个死锁?

更新-注:不幸的是,一些管理员删除了评论部分,所以我不能再提及那个讨论了:/

基本上,我说过内存泄漏是无害的,只是它会消耗内存(因此,从长远来看,这可能会对应用程序/系统造成损害)。他们说这不是真的,C++ RAII会引起严重的问题。-是的,如果您不删除析构函数中一些重要代码的对象,可能会导致问题,但在我的词汇表中,这是一个主要的错误,而不是内存泄漏。

EN

回答 5

Software Engineering用户

发布于 2011-09-17 01:10:25

典型的内存泄漏正是您所描述的,即未能释放进程分配的一些内存。其结果通常是程序在运行时逐渐增大,由此可能产生次要影响。随后的内存分配可能会失败,或者系统可能由于浪费的资源而出现错误行为。

但是,只要问题确实泄漏内存,就可以准确地将其描述为内存泄漏。它还可以做其他可能更严重的事情。例如,如果无法关闭标准I/O流,这就是内存泄漏,因为与流关联的内存将被泄漏。但是,它也可以使用文件描述符运行进程,或者可能由于标准I/O流数量的限制而导致后续流打开失败。

票数 5
EN

Software Engineering用户

发布于 2011-09-17 02:38:02

那得看情况。当然,由于内存泄漏,程序可能会崩溃。但我不认为所有的崩溃都是内存泄漏。内存泄漏有一个非常清晰的定义。

应用程序崩溃可能导致许多不同的事情。

  • 未处理异常
  • 内存泄漏
  • 资源泄漏
  • 死锁
  • 其他(代码中的错误)

在崩溃时,必须使用崩溃/内存转储,并使用像Windbg这样的工具来分析崩溃时代码的状态,以确定是否是内存泄漏、死锁、错误等等。

内存泄漏是在您完成内存后根本没有释放内存。正如您已经注意到的,如果满足资源限制,这可能导致崩溃。

资源泄漏并不是在您完成资源后释放资源。一个示例可能是打开数据库连接,而不是在完成后关闭它。

死锁不同于泄漏,因为泄漏可能不会被检测到,如果不消耗系统资源,则可能是良性的。死锁是一种情况,不会随着时间的推移而增加。

票数 1
EN

Software Engineering用户

发布于 2011-09-17 01:33:17

“内存泄漏”的相关含义适用于使用垃圾收集的语言。在那里,内存应该是泄漏的,但是如果你不能这样做,这也是同样的问题。

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

https://softwareengineering.stackexchange.com/questions/108882

复制
相关文章

相似问题

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