假设我将一些内存恶意锁定到一些指针中,但在程序退出之前没有释放它们。这个内存是在退出时自动释放,还是内存泄漏会继续存在,直到我重新启动计算机?
发布于 2013-04-08 23:11:45
答案是,大多数情况下。
释放堆是操作系统的责任。虽然大多数操作系统(特别是主流操作系统)在退出时会释放堆,但例如嵌入式系统操作系统并不一定如此。
当您调用在堆上分配内存时,将对操作系统的内核空间进行系统调用,以提供此内存。该内存映射到您的进程结构,该结构由操作系统维护。当您的程序退出时,OS将执行清理路由,关闭所有文件描述符,并将此内存标记为空闲,以便分配给其他进程(以及其他进程)。
其中一些答案是不正确的,因为它是依赖于编译器的。编译器不会说“嘿,在程序退出时释放所有内存”。这是没有意义的,如果操作系统意外地终止程序,会发生什么?不需要,只要显式地为堆请求内存分配/释放,编译器就会负责生成系统调用。
发布于 2013-04-08 23:05:48
内存不会被你的程序或libc释放,但会被所有现代操作系统上的操作系统释放。它们将内存分配给特定的进程,并在进程终止时清理内存。
发布于 2013-04-08 23:05:10
任何现代桌面操作系统都会在进程退出时回收资源。不会有内存泄漏。
https://stackoverflow.com/questions/15882531
复制相似问题