Linux是否会立即自动重新声明应用程序使用的所有内存?Linux和内存泄漏
如果是这样,那么应用程序真的会在退出之前释放所有内存?
在调用exit(0)之前真的有必要在多线程应用程序中调用每个类的析构函数吗?
如果Linux总是立即重新声明应用程序使用的所有内存,那么内存泄漏只是应用程序创建的悬挂指针,而且它也只是它的生命周期。
Linux是否会立即自动重新声明应用程序使用的所有内存?Linux和内存泄漏
如果是这样,那么应用程序真的会在退出之前释放所有内存?
在调用exit(0)之前真的有必要在多线程应用程序中调用每个类的析构函数吗?
如果Linux总是立即重新声明应用程序使用的所有内存,那么内存泄漏只是应用程序创建的悬挂指针,而且它也只是它的生命周期。
Linux会立即自动重新声明应用程序使用的所有内存吗?
不,但是在你意味着的意义上。所有属于该进程的虚拟内存都被释放。不共享的帧可用于其他进程。
如果是这样的话,那么应用程序真的会在退出前释放所有内存吗?
是的,有以下几个原因:
当没有释放内存是您想要的时候可能会出现的情况,通常这些会与性能相关,并且只针对这些情况。
在调用exit(0)之前真的值得在多线程应用程序中调用每个类的析构函数吗?
这与上一个问题非常相似。另请注意,不释放来自第三方的资源,操作系统库与释放内存的效果完全相同。
如果Linux总是立即重新声明应用程序使用的所有内存,那么内存泄漏只是应用程序创建的悬挂指针,也只是它的生命周期。
是。这个理论唯一破坏的时候是所持有的资源是全球性的,并且在流程终止时不会消失。共享内存,设计不佳的第三方库,临时文件等都是这些例子。
它确实取决于这些构造函数的作用。如果他们所做的只是释放私人记忆,那么不需要。
如果他们做了其他事情,比如可能没有写入数据的光盘文件,那么这可能很重要。
我非常喜欢_exit()库调用的大风扇 - 它就像exit()但atexit处理程序不运行。
强大的应用程序应该能够随时容忍消失,因此有效的退出方式是_exit(),因为它比受到更多的控制而不是崩溃。
当然还有其他泄漏资源的方式 - 这不仅仅是记忆。临时文件是一个明显的文件 - 在你调用_exit之后它将保持存在。
此外,如果您创建posix或sysv共享内存它保持现有的进程退出。这实际上类似于临时文件(在Linux下,它在内核中的tmpfs上实现为一个)
此外,还有专业性。 – Joe 2010-08-25 12:45:48
@Hasturkun:谢谢我从来没有引用过 – 2010-08-25 14:33:29
@Joe:你是什么意思? – 2010-08-25 15:59:25