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

问Linux和内存泄漏
EN

Stack Overflow用户
提问于 2010-08-25 19:17:14
回答 2查看 1.1K关注 0票数 1

Linux是否会立即自动回收应用程序使用的所有内存?

如果是这样,那么应用程序真的应该在退出之前释放所有内存吗?

在调用exit(0)之前,是否真的值得在多线程应用程序中调用每个类的析构函数?

如果Linux总是立即回收应用程序使用的所有内存,那么内存泄漏只是应用程序创建的悬空指针,也只是它的生命周期。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-08-25 19:24:35

是否会立即自动回收应用程序使用的所有内存?

不,但从你所暗示的意义上来说是的。属于该进程的所有虚拟内存都将被释放。未共享的帧可供其他进程使用。

如果是这样,那么应用程序真的应该在退出之前释放所有内存吗?

是的,有几个原因:

  • 将来您可能决定将代码扩展到其他用途,以后添加清理可能会很困难。
  • 您的内存使用量过大,实际上需要“浪费”虚拟内存空间。
  • 您需要跟踪一些错误:未仔细释放获取的资源将使调试变得非常困难。

当不释放内存是您想要的时,可能会出现一些情况,通常这些情况与性能有关,并且仅特定于这些情况。

在调用

(0)之前,在多线程应用程序中调用每个类的析构函数真的值得吗?

这与上一个问题基本相同。还请注意,不从第三方释放资源和OS库实际上与不释放内存是相同的。

如果Linux总是立即回收应用程序使用的所有内存,那么内存泄漏只是应用程序创建的悬空指针,也只是它的生命周期。

是啊。只有当持有的资源是全局的,并且不会在进程终止时消失时,这个理论才会崩溃。共享内存、设计不佳的第三方库、临时文件等都是这些问题的例子。

票数 6
EN

Stack Overflow用户

发布于 2010-08-25 21:19:48

这真的取决于这些构造函数做了什么。如果它们所做的只是释放私有内存,那么你不需要这样做。

如果他们做其他事情,如刷新磁盘文件,其中可能有未写入的数据,那么这可能是重要的。

顺便说一句,我是_exit()库调用的铁杆粉丝--它类似于exit(),但是atexit处理程序并没有运行。

健壮的应用程序应该能够容忍在任何时候消失,因此一个有效的退出方法是_exit(),因为它仍然比崩溃更受控制。

当然,还有其他泄漏资源的方式--不仅仅是内存。临时文件是一个显而易见的文件-在您调用_exit之后,它将继续存在。

此外,如果您创建了posix或sysv共享内存,它会在进程退出时仍然存在。这实际上类似于临时文件(在Linux下,它是在内核的tmpfs上实现的)

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

https://stackoverflow.com/questions/3565264

复制
相关文章

相似问题

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