动态数据结构:堆
一个典型的个人电脑今天的任何一台工作站都安装了16到64兆字节的RAM。使用一种叫做虚拟内存在美国,系统可以交换电脑硬盘上和硬盘上的内存,让CPU产生一种错觉,以为自己的内存要大得多,比如200兆到500兆。虽然就CPU而言,这种错觉是完整的,但从用户的角度来看,它有时会极大地降低速度。尽管有这个缺点,但虚拟内存是一种非常有用的技术,可以以廉价的方式“增加”机器中的RAM数量。为了进行讨论,让我们假设一台典型计算机的总内存空间为50兆字节(无论该内存是在实际RAM中实现的还是在虚拟内存中实现的)。
的操作系统在机器上负责50兆字节的内存空间。操作系统以几种不同的方式使用空间,如下所示。18新利最新登入
广告
当然,这是一种理想化,但基本原则是正确的。正如您所看到的,内存保存了当前在机器上运行的不同应用程序的可执行代码,以及操作系统本身的可执行代码。每个应用程序都有一些与之相关的全局变量。这些变量也会消耗内存。最后,每个应用程序使用一个称为堆栈,其中保存了任何函数使用的所有局部变量和参数。堆栈还记得函数调用的顺序,以便函数正确返回。每次调用函数时,它的局部变量和参数都会被“压入”堆栈。当函数返回时,这些局部变量和参数被“弹出”。正因为如此,程序堆栈的大小随着程序的运行而不断波动,但它有一个最大大小。
当程序完成执行时,操作系统从内存中卸载它、它的全局变量和它的堆栈空间。一个新的程序可以在以后使用这个空间。通过这种方式,计算机系统中的内存在程序执行和完成时不断地被“回收”和重用。
一般来说,在任何给定的时刻,大约有50%的计算机总内存空间可能未使用。操作系统拥有并管理未使用的内存,这些内存统称为堆.堆非常重要,因为应用程序在使用C函数执行期间可以使用它malloc(内存分配)和免费的.堆允许程序在执行程序期间准确地在需要内存时分配内存,而不是使用特定大小的数组声明预先分配内存。