Linux是否会立即自动重新声明应用程序使用的所有内存?
如果是这样,那么应用程序是否真的会在退出之前释放所有内存?
在调用exit(0)之前调用多线程应用程序中每个类的析构函数真的值得吗?
如果Linux总是立即重新声明应用程序使用的所有内存,那么内存泄漏只是应用程序创建的悬空指针,而且只是它的生命周期。
答案 0 :(得分:6)
Linux是否会立即自动重新声明应用程序使用的所有内存?
不,但从你暗示的意义上来说是肯定的。属于该进程的所有虚拟内存都将被释放。未共享的帧可供其他进程使用。
如果是这样,那么应用程序是否真的要在退出之前释放所有内存?
是的,有几个原因:
在没有释放内存的情况下,有些情况可能会出现,通常这些情况与性能有关,并且只针对这些情况。
在调用exit(0)之前调用多线程应用程序中每个类的析构函数真的值得吗?
这与上一个问题几乎相同。另请注意,不从第三方释放资源,OS库实际上与不释放内存有效。
如果Linux总是立即重新声明应用程序使用的所有内存,那么内存泄漏只是应用程序创建的悬空指针,而且只是它的生命周期。
烨。这个理论破裂的唯一一次是资源持有是全球性的,并且不会在流程终止时消失。共享内存,设计不佳的第三方库,临时文件等都是这些例子。
答案 1 :(得分:2)
这取决于那些构造函数的作用。如果他们所做的只是释放私人记忆,那么你不需要。
如果他们做其他事情,例如可能有未写入数据的刷新光盘文件,那么它可能很重要。
顺便说一句,我非常喜欢_exit()库调用 - 就像exit()但是atexit处理程序没有运行。
强大的应用程序应该能够容忍随时消失,因此退出的有效方法是_exit(),因为它仍然比崩溃更有效。
当然还有其他泄漏资源的方法 - 它不仅仅是内存。临时文件是一个显而易见的文件 - 在调用_exit后它将保持存在。
此外,如果您创建posix或sysv共享内存,它会在进程退出时保持存在。这与临时文件非常类似(在Linux下,它在内核中的tmpfs上实现)