程序保存在存储设备中,通过有序的被读出来实现运行,这一机制称为存储程序方式(程序内置方式)。计算机中主要的存储部件是内存和磁盘。磁盘中存储的程序,必须要加载到内存后才能运行。磁盘中保存的原始程序是无法直接运行的。这是因为,负责解析和运行程序内容的CPU,需要通过内部程序计数器来指定内存地址,然后才能读出程序。及时CPU可以直接读出并运行磁盘中保存的程序,由于磁盘读取速度慢,程序的运行速度还是会降低。
磁盘缓存指的是把磁盘中读出的数据存储到内存空间中的方式。这样一来,当接下来需要读取同一数据时,就不用通过实际的磁盘,而是从磁盘缓存中把内容读出。使用磁盘缓存可以大大改善磁盘数据的访问速度。Windows提供了磁盘缓存机制作为操作系统。现在,随着硬盘访问速度的大幅改善,磁盘缓存的效果也没有之前那么明显了。把低速设备的数据保存在高速设备中,需要时可以直接将其从高速设备中读出,这种缓存的方式在其他情况下也会用到。其中的一个实例就是,在Web浏览器中的使用。
虚拟内存是指把磁盘的一部分作为假想的内存来使用。这与磁盘缓存是假想的磁盘(实际上是内存)相对,虚拟内存是假想的内存(实际上是磁盘)。通过借助虚拟内存,在内存不足时也可以运行程序。虚拟内存虽说是把磁盘作为内存的一部分来使用,但实际上,正在运行的程序部分,在这个时间点上是必须存在在内存中的。也就是说,为了实现虚拟内存,就必须把实际内存(也可称为物理内存)的内容,和磁盘上的虚拟内存的内容进行部分置换(swap)并同时运行程序。虚拟内存的方法,有分页式和分段式两种。Windows采用的是分页式。该方式是指,在不考虑程序构造的情况下,把运行的程序按到一定大小的页(page)进行分割,并以业为单位在内存和磁盘间进行置换。为了实现虚拟内存功能,Windows在磁盘上提供了虚拟内存用的文件(page file,页文件)。该文件由Windows自动做成和管理。文件的大小也就是虚拟内容的大小,通常是实际内存的相同程度至两倍程度。
许多人可能会认为,通过借助磁盘虚拟内存就可以解决内存不足的问题。而虚拟内存也确实能避免因内存不足导致的应用无法启动。为了从根本上解决内存不足的问题,需要增加内存的容量,或者尽量把运行的应用文件变小的编程方法。第一种:通过DLL文件实现函数共用。DLL文件,顾名思义,是在程序运行时可以动态加载Library(函数和数据的集合)的文件。第二种:通过调用_st d call来减小程序文件的大小。通过调用_st d call来减小程序文件的方法,是用C语言编写应用时可以利用的高级技巧。不过,这一思路应该也可以应用在其他编程语言中。C语言中,在调用函数后,需要执行栈清理处理指令。栈清理处理是指,把不需要的数据从接收和传递函数的参数时使用的内存上的栈区域中清理出去。该命令不是程序计数的,而是在程序编译时,由编译器自动附加到程序中的。
吃饭是通过把其物理表面划分为多个空间来使用的。划分的方式有扇区方式和可变长方式两种,前者是将磁盘划分为固定长度的空间,后者则是指把磁盘划分为长度可变的空间。扇区方式中,把磁盘表面分成若干个同心圆的空间,就是磁道,把迟到按照固定大小(能存储的数据长度相同)划分而成的空间就是扇区。不管是硬盘还是软盘,不同的文件是不能存储在同一个簇中的,否则就会导致只有一封的文件不能被删除。以簇为单位进行读写时,1簇中没有填满的区域会保持不被使用的状态。虽然看起来有些浪费,不过该机制就是如此规定的,我们也无可奈何。