当我听到“内存泄漏”这个术语时,我指的是程序中的一个bug,除了它没有释放内存资源,如果它持续释放内存资源,它就会消耗大量的内存,损害系统性能,在最坏的情况下会导致程序崩溃(或者其他程序,如果操作系统决定杀死这个程序的话)。
但是现在在这个问题的评论部分,我想到的是这个词的全部含义。我以前经常看到它在这个意义上的使用。
https://stackoverflow.com/questions/7451437/is-this-a-mem-leak-in-main
那么,你会把一个简单的内存泄漏称为一种简单的内存泄漏,它会使一个程序因其他副作用而崩溃,还是因为不释放一个锁而导致一个死锁?
更新-注:不幸的是,一些管理员删除了评论部分,所以我不能再提及那个讨论了:/
基本上,我说过内存泄漏是无害的,只是它会消耗内存(因此,从长远来看,这可能会对应用程序/系统造成损害)。他们说这不是真的,C++ RAII会引起严重的问题。-是的,如果您不删除析构函数中一些重要代码的对象,可能会导致问题,但在我的词汇表中,这是一个主要的错误,而不是内存泄漏。
发布于 2011-09-17 01:10:25
典型的内存泄漏正是您所描述的,即未能释放进程分配的一些内存。其结果通常是程序在运行时逐渐增大,由此可能产生次要影响。随后的内存分配可能会失败,或者系统可能由于浪费的资源而出现错误行为。
但是,只要问题确实泄漏内存,就可以准确地将其描述为内存泄漏。它还可以做其他可能更严重的事情。例如,如果无法关闭标准I/O流,这就是内存泄漏,因为与流关联的内存将被泄漏。但是,它也可以使用文件描述符运行进程,或者可能由于标准I/O流数量的限制而导致后续流打开失败。
发布于 2011-09-17 02:38:02
那得看情况。当然,由于内存泄漏,程序可能会崩溃。但我不认为所有的崩溃都是内存泄漏。内存泄漏有一个非常清晰的定义。
应用程序崩溃可能导致许多不同的事情。
在崩溃时,必须使用崩溃/内存转储,并使用像Windbg这样的工具来分析崩溃时代码的状态,以确定是否是内存泄漏、死锁、错误等等。
内存泄漏是在您完成内存后根本没有释放内存。正如您已经注意到的,如果满足资源限制,这可能导致崩溃。
资源泄漏并不是在您完成资源后释放资源。一个示例可能是打开数据库连接,而不是在完成后关闭它。
死锁不同于泄漏,因为泄漏可能不会被检测到,如果不消耗系统资源,则可能是良性的。死锁是一种情况,不会随着时间的推移而增加。
发布于 2011-09-17 01:33:17
“内存泄漏”的相关含义适用于使用垃圾收集的语言。在那里,内存应该是泄漏的,但是如果你不能这样做,这也是同样的问题。
https://softwareengineering.stackexchange.com/questions/108882
复制相似问题