malloc会发生什么?

时间:2014-03-25 14:08:00

标签: c malloc

嗯,我想我知道这个问题的答案,但我更确信。如果您在堆上使用malloc内存并在释放空间之前退出程序,那么os或编译器是否为您释放空间?

3 个答案:

答案 0 :(得分:3)

当操作系统从其进程列表中删除进程的描述符(在Linux的情况下为task_struct)时,操作系统会为您释放空间。

编译器通常会生成一个exit()系统调用,并在那里处理所有这些。

在Linux上,基本上所有这些都发生在内核的exit_mm()函数中,最终由exit()调用。它将使用mm_release()函数释放进程拥有的地址空间。所有这些来源都可供您阅读(虽然它可能会有点复杂:)但是,操作系统负责释放进程的资源。

仅仅因为我非常喜欢它,如果您已经进入这些主题,这是一个非常好的阅读:Understanding the Linux Kernel

答案 1 :(得分:3)

这超出了C标准的范围。发生什么取决于系统。在所有常见的主流操作系统中,操作系统将在完成该过程时释放内存。

尽管如此,总是清理自己的烂摊子是一种好习惯。因此,无论操作系统做什么,您都应该释放所有正在使用的资源。这样做也是发现隐藏的运行时错误的一种很好的方法:如果你有错误,当你试图释放资源时程序可能会崩溃,从而警告程序员这些错误。

对于编译器,它仅在程序创建期间处于活动状态,它与程序的运行时执行完全无关。

答案 2 :(得分:1)

操作系统将清除程序消耗的所有资源,包括所有已分配的内存,网络连接,文件句柄等。