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

时间:2012-08-18 02:40:40

标签: c linux

假设程序有内存泄漏。

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

2)进程保存的其他资源怎么办?

4 个答案:

答案 0 :(得分:7)

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

答案 1 :(得分:2)

1)是的,内存已被释放。

2)不同的流程模型?我不知道你是什么意思,但是一旦一个程序死了,它malloc'或new'的所有内存都将被返回到操作系统,并将被重新分配给另一个程序后面。

3)一旦程序退出,所有分配的内存都将返回给操作系统,但是在该过程由另一个进程wait()进行之前,会有少量数据,例如等待某人的退出状态收集它。在Linux上,我相信,来自bash / init的正常进程将被等待并自动清理。

答案 2 :(得分:2)

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

在POSIX系统上,有许多资源在进程退出时不会被释放,共享信号量,消息队列和内存段。这些意味着在进程之间持久存在,所以它们根本不能。应用程序有责任释放它们。

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

答案 3 :(得分:1)

你可以放心地假设现代的Linux系统会释放内存......但是......它不是一个保证,当然不是最佳实践。