我的问题是泄漏的内存如何标记为“正在使用”。根据我的理解,每个程序都会为其所有内存需求(堆栈、堆、只读、程序内存)获得一块连续的内存。我想一旦程序完成,所有这些都将被释放(释放 = 打开新程序以供使用)。现在,即使我在程序中有内存泄漏,当程序内存块被释放时,它不会自动释放吗?
我遇到过有关此问题的问题,其中说操作系统必须将其释放,但在某些较旧的操作系统版本中,这不会发生。鉴于第一段中提供的解释,我不明白为什么这会成为一个问题。此外,没有人谈论“释放”实际上意味着/做什么。
在现代操作系统中,进程不分配物理内存。它们分配由物理内存支持的地址空间。当进程终止时,它的地址空间不再存在。
操作系统很久以前确实允许进程分配物理内存。在那些情况下,无法释放物理内存将导致物理内存永久丢失。
我的问题是泄漏的内存如何标记为“正在使用”。根据我的理解,每个程序都会为其所有内存需求(堆栈、堆、只读、程序内存)获得一块连续的内存。
是的,它获得了一块连续的虚拟内存。该虚拟内存根据需要由物理内存提供支持。
我想一旦程序完成,所有这些都将被释放(释放 = 打开新程序以供使用)。
是的,但不是。是的,这一切都被释放了。不,它不会开放供新程序使用,因为一个程序不可能使用另一个进程的虚拟内存,因为每个进程都有自己的虚拟内存空间。
现在,即使我在程序中有内存泄漏,当程序内存块被释放时,它不会自动释放吗?
没关系。虚拟内存不是稀缺资源。它是否被释放并不重要。然而,重要的是任何支持该虚拟内存的物理内存将不再支持它,因为虚拟内存不再存在。这释放了物理内存以用于其他目的。
我遇到过有关此问题的问题,其中说操作系统必须将其释放,但在某些较旧的操作系统版本中,这不会发生。鉴于第一段中提供的解释,我不明白为什么这会成为一个问题。
一些较旧的操作系统甚至没有虚拟内存支持。有些具有直接分配物理内存的内存分配功能。
此外,没有人谈论“释放”实际上意味着/做什么。
在现代操作系统中,当它终止时,其虚拟地址空间不再存在。这可能会导致内存的某些物理页面(实际 RAM)的引用降为零,这将导致操作系统在必要时将它们重新分配给新用途。