假设程序有内存泄漏。
1)当进程死亡(正常或分段错误)时,那些泄漏的内存是否被释放?
2)进程保存的其他资源怎么办?
答案 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系统会释放内存......但是......它不是一个保证,当然不是最佳实践。