【发布时间】:2013-06-24 14:10:06
【问题描述】:
我读到 malloc 函数在堆上分配内存,堆驻留在 OS(Linux) 中的虚拟内存中。所以我有几个疑问:
如果使用 malloc 分配内存的进程被 kill 或退出自身终止而不释放内存。该内存是否会在终止后由操作系统释放,因为它位于虚拟内存中?
- 如何知道 Linux 操作系统中的堆大小?
- 如何在 Linux 操作系统中更改堆大小?
【问题讨论】:
-
“如果正在使用 malloc 分配内存的进程被终止或退出本身而不释放内存。终止后操作系统是否会像在虚拟内存中一样释放内存?”是的,所有操作系统都这样做(除了一些嵌入式设备等)。
-
你的意思是从嵌入式设备中的堆分配的内存(其中没有虚拟内存)被杀死或退出而不解除分配创建内存泄漏问题?但是像ubuntu PC这样拥有虚拟内存的人会被操作系统释放,但不依赖于进程?
-
如果应用程序结束(或强制关闭),每个操作系统都会释放应用程序请求的任何资源。如果您使用的操作系统不支持,您就会知道,相信我。
-
是不是说Linux操作系统不会有内存泄漏问题?
-
如果您在应用程序内部产生内存泄漏,那么您的应用程序只是丢失了对这些内存块的跟踪。但是,Linux 仍然知道该块已分配给运行程序的进程,因此它会在进程结束时处理它。资源管理是任何操作系统的重要组成部分。
标签: linux