我在这个问题上进行了很多搜索,但无法找到确切的查询,尽管它看起来很笼统,可能已在某个地方被询问和回答了。
我想知道某个过程导致内存泄漏并终止后会发生什么。在我看来,由于虚拟内存,这并不重要。在所有物理页面仍然可以分配给其他/新进程之后,即使它导致较早的内存泄漏(在旧进程导致内存泄漏之后)
但是我也在某处读到,由于内存泄漏,您需要重新启动系统,而我似乎不明白为什么?
答案 0 :(得分:1)
推荐阅读:Operating Systems: Three Easy Pieces
在常见的操作系统(例如Linux,Windows,MacOSX,Android)上,每个process都有自己的virtual address space(以及堆存储器,例如用于malloc
或mmap
,位于该虚拟地址空间内),并且当进程终止时,其整个虚拟地址空间将被破坏。
因此内存泄漏不会在进程本身中幸存下来。
可能会有一些微妙的情况(例如,使用shm_overview(7)或shmget(2)时出现泄漏)。
阅读(对于Linux)proc(5),尝试使用cat /proc/self/maps
,另请参阅this。学习使用valgrind和Address Sanitizer。
还请阅读有关Garbage Collection的信息。这很相关。
答案 1 :(得分:1)
在现代操作系统中,地址空间分为用户空间和系统空间。所有进程的系统空间都是相同的。
杀死进程时,将破坏该进程的用户空间。如果应用程序存在内存泄漏,则可以通过终止进程来弥补该泄漏。
但是,操作系统也可以在系统空间中分配内存。如果操作系统的系统空间内存分配出现内存泄漏,则终止进程不会释放它。
那是迫使您重新引导系统的内存泄漏类型。