进程终止后内存泄漏和其他资源

min*_*nel 5 c linux

假设一个程序有内存泄漏.

1)当进程死亡(正常或分段错误)时,那些泄漏的内存是否被释放?

2)一个过程持有的其他资源怎么样?

Rad*_*nej 7

对于大多数现代操作系统(Linux,来自NT 3.5左右的窗口),是的.


Jen*_*edt 2

我认为,在所有现代系统上,堆栈和堆内存都被释放,文件描述符也被关闭。

在 POSIX 系统上,有许多资源在进程退出时不会释放,例如共享信号量、消息队列和内存段。这些本来是要在进程之间持久存在的,所以它们根本做不到。应用程序有责任释放它们。

例如,它可以使用on_exit处理程序来做到这一点,但通常有一种更简单的方法。对于内存段,您通常会shm_unlink在所有进程都打开这样的段后使用。当最后一个进程(及其该段的文件描述符)关闭时,该段将不再存在。