Linux是否会立即自动回收应用程序使用的所有内存?
如果是这样,那么应用程序真的应该在退出之前释放所有内存吗?
在调用exit(0)之前,是否真的值得在多线程应用程序中调用每个类的析构函数?
如果Linux总是立即回收应用程序使用的所有内存,那么内存泄漏只是应用程序创建的悬空指针,也只是它的生命周期。
发布于 2010-08-25 19:24:35
是否会立即自动回收应用程序使用的所有内存?
不,但从你所暗示的意义上来说是的。属于该进程的所有虚拟内存都将被释放。未共享的帧可供其他进程使用。
如果是这样,那么应用程序真的应该在退出之前释放所有内存吗?
是的,有几个原因:
当不释放内存是您想要的时,可能会出现一些情况,通常这些情况与性能有关,并且仅特定于这些情况。
在调用
(0)之前,在多线程应用程序中调用每个类的析构函数真的值得吗?
这与上一个问题基本相同。还请注意,不从第三方释放资源和OS库实际上与不释放内存是相同的。
如果Linux总是立即回收应用程序使用的所有内存,那么内存泄漏只是应用程序创建的悬空指针,也只是它的生命周期。
是啊。只有当持有的资源是全局的,并且不会在进程终止时消失时,这个理论才会崩溃。共享内存、设计不佳的第三方库、临时文件等都是这些问题的例子。
发布于 2010-08-25 21:19:48
这真的取决于这些构造函数做了什么。如果它们所做的只是释放私有内存,那么你不需要这样做。
如果他们做其他事情,如刷新磁盘文件,其中可能有未写入的数据,那么这可能是重要的。
顺便说一句,我是_exit()库调用的铁杆粉丝--它类似于exit(),但是atexit处理程序并没有运行。
健壮的应用程序应该能够容忍在任何时候消失,因此一个有效的退出方法是_exit(),因为它仍然比崩溃更受控制。
当然,还有其他泄漏资源的方式--不仅仅是内存。临时文件是一个显而易见的文件-在您调用_exit之后,它将继续存在。
此外,如果您创建了posix或sysv共享内存,它会在进程退出时仍然存在。这实际上类似于临时文件(在Linux下,它是在内核的tmpfs上实现的)
https://stackoverflow.com/questions/3565264
复制相似问题