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