繁体   English   中英

malloc会发生什么?

[英]what happens to malloc?

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

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

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

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

仅仅因为我非常喜欢它,如果您正在阅读这些主题,这是一个非常好的读物: 理解Linux内核

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM