Linux和内存泄漏

Linux和内存泄漏,linux,memory-leaks,Linux,Memory Leaks,Linux是否会自动立即重新声明应用程序使用的所有内存 如果是这样,那么应用程序真的应该在退出之前释放所有内存吗 在调用exit(0)之前,调用多线程应用程序中每个类的析构函数真的值得吗 如果Linux总是立即重新声明应用程序使用的所有内存,那么内存泄漏只是应用程序创建的悬而未决的指针,也只是应用程序的生命周期 Linux是否会自动立即重新声明应用程序使用的所有内存 不,但在你暗示的意义上是的。属于该进程的所有虚拟内存都将被释放。未共享的帧可供其他进程使用 如果是这样,那么应用程序真的应该在退出

Linux是否会自动立即重新声明应用程序使用的所有内存

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

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

如果Linux总是立即重新声明应用程序使用的所有内存,那么内存泄漏只是应用程序创建的悬而未决的指针,也只是应用程序的生命周期

Linux是否会自动立即重新声明应用程序使用的所有内存

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

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

是的,有几个原因:

  • 您可能决定将来将代码扩展到其他用途,以后添加清理可能会很困难
  • 内存使用过多,实际上需要“浪费”虚拟内存空间
  • 您需要跟踪一些bug:不小心地释放获取的资源将使调试非常困难
当不释放内存是您想要的时,可能会出现一些情况,通常这些情况与性能相关,并且仅特定于这些情况

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

这与上一个问题几乎相同。还请注意,不从第三方和OS库释放资源实际上等同于不释放内存

如果Linux总是立即重新声明应用程序使用的所有内存,那么内存泄漏只是应用程序创建的悬而未决的指针,也只是应用程序的生命周期

是的。这一理论的唯一崩溃是当所持有的资源是全局的,并且不会在流程终止时消失。共享内存、设计拙劣的第三方库、临时文件等就是这些例子

Linux是否会自动立即重新声明应用程序使用的所有内存

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

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

是的,有几个原因:

  • 您可能决定将来将代码扩展到其他用途,以后添加清理可能会很困难
  • 内存使用过多,实际上需要“浪费”虚拟内存空间
  • 您需要跟踪一些bug:不小心地释放获取的资源将使调试非常困难
当不释放内存是您想要的时,可能会出现一些情况,通常这些情况与性能相关,并且仅特定于这些情况

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

这与上一个问题几乎相同。还请注意,不从第三方和OS库释放资源实际上等同于不释放内存

如果Linux总是立即重新声明应用程序使用的所有内存,那么内存泄漏只是应用程序创建的悬而未决的指针,也只是应用程序的生命周期


是的。这一理论的唯一崩溃是当所持有的资源是全局的,并且不会在流程终止时消失。共享内存、设计拙劣的第三方库、临时文件等就是这样的例子。

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

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

顺便说一句,我非常喜欢_exit()库调用——它类似于exit(),但atexit处理程序没有运行

健壮的应用程序应该能够容忍随时消失,因此退出的有效方法是_exit(),因为它仍然比崩溃更容易控制

当然,还有其他泄漏资源的方式——不仅仅是内存。临时文件是一个很明显的文件,在您调用_exit后,它将保持存在


此外,如果您创建posix或sysv共享内存,它将在进程退出时保持存在。这非常类似于一个临时文件(在Linux下,它被实现为内核中tmpfs上的一个文件)

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

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

顺便说一句,我非常喜欢_exit()库调用——它类似于exit(),但atexit处理程序没有运行

健壮的应用程序应该能够容忍随时消失,因此退出的有效方法是_exit(),因为它仍然比崩溃更容易控制

当然,还有其他泄漏资源的方式——不仅仅是内存。临时文件是一个很明显的文件,在您调用_exit后,它将保持存在


此外,如果您创建posix或sysv共享内存,它将在进程退出时保持存在。这非常类似于一个临时文件(在Linux下,它是在内核中的tmpfs上实现的)

@Hasturkun:谢谢,我从来没有引用过before@Hasturkun:谢谢,我以前从未引用过