Linux和内存泄漏

Sas*_*shi 1 linux memory-leaks

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

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

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

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

Mat*_*ner 6

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

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

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

是的,有几个原因:

  • 您可能决定将代码扩展到其他目的,稍后添加清理可能会很困难.
  • 你有过多的内存使用,实际上需要"浪费"虚拟内存空间.
  • 您需要追踪一些错误:不小心释放获取的资源将使调试变得非常困难.

在没有释放内存的情况下,有些情况可能会出现,通常这些情况与性能有关,并且仅针对这些情况.

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

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

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

对.这种理论破裂的唯一一次是资源持有是全球性的,并且不会在流程终止时消失.共享内存,设计不佳的第三方库,临时文件等都是这些的例子.