首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >当程序退出时,堆是否会被释放?

当程序退出时,堆是否会被释放?
EN

Stack Overflow用户
提问于 2013-04-08 23:03:20
回答 6查看 6.2K关注 0票数 12

假设我将一些内存恶意锁定到一些指针中,但在程序退出之前没有释放它们。这个内存是在退出时自动释放,还是内存泄漏会继续存在,直到我重新启动计算机?

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2013-04-08 23:11:45

答案是,大多数情况下。

释放堆是操作系统的责任。虽然大多数操作系统(特别是主流操作系统)在退出时会释放堆,但例如嵌入式系统操作系统并不一定如此。

当您调用在堆上分配内存时,将对操作系统的内核空间进行系统调用,以提供此内存。该内存映射到您的进程结构,该结构由操作系统维护。当您的程序退出时,OS将执行清理路由,关闭所有文件描述符,并将此内存标记为空闲,以便分配给其他进程(以及其他进程)。

其中一些答案是不正确的,因为它是依赖于编译器的。编译器不会说“嘿,在程序退出时释放所有内存”。这是没有意义的,如果操作系统意外地终止程序,会发生什么?不需要,只要显式地为堆请求内存分配/释放,编译器就会负责生成系统调用。

票数 13
EN

Stack Overflow用户

发布于 2013-04-08 23:05:48

内存不会被你的程序或libc释放,但会被所有现代操作系统上的操作系统释放。它们将内存分配给特定的进程,并在进程终止时清理内存。

票数 4
EN

Stack Overflow用户

发布于 2013-04-08 23:05:10

任何现代桌面操作系统都会在进程退出时回收资源。不会有内存泄漏。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15882531

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档