计算机中,内存和磁盘都属于存储设备。
不同之处:
1.内存通过电流实现存储,一旦断电,数据消失;
磁盘通过磁效应实现存储,如果断电,数据不消失。
2。内存高速高价,磁盘低速低价。
存储程序方式(程序内置方式)
即在存储设备(磁盘)中存储程序,需要运行程序时,将程序加载到内存,再由CPU中执行(程序计数器指定内存地址,可以参考第一篇文章)。
磁盘缓存(disque cache)
磁盘缓存,就是将磁盘上读出的数据暂时性存储在内存中。这样可以大大提高数据读写的速度。
但是。。。。。。
虚拟内存(VM,Virtual Memory)
虚拟内存,即把磁盘的一部分划分作为假象的内存使用。这样就可以运行大小大于剩余内存空间的程序了。
但是,内存和磁盘对数据的读写速度终究是不同的,不可能真的同时在内存和磁盘上运行程序。因此,其实际机制为,在运行程序的同时,将内存中物理内存的内容与磁盘中虚拟内存的内容调换。通过这样合理地调度程序的内容,以确保正在进行的程序部分置于内存中,且大小不超过当前内存容量,其余部分置于虚存(磁盘)中。分页式和分段式
分页式:将运行的程序分割成一系列一定大小的页(page),并以这些页为单位在物理内存和虚拟内存中置换。把从磁盘的内容读到内存称为Page In,把从内存的内容读到磁盘称为Page Out。
Windows操作系统中,使用分页式虚存。一页大小是4K。
在编程中节约内存
虚拟内存机制也无法彻底解决内存不足的问题。
根本上解决内存不足的问题:
1.提高内存容量,增加内存条。
2.让存储的文件变小。
缩小应用程序的方法
DLL文件实现函数共有
DLL(Dynamic Link Library),动态链接库,在这个文件中集合了一系列函数和数据。运行程序时,可以加载此文件,即动态加载,以便能够使用DLL文件中集合的函数和数据。容易看到,DLL文件是可以被多个程序公用的,因此可以有效的节省内存。
对比:
静态链接(Static Link):已经有了某个编译好的函数F,对每个需要使用它的程序,都使用静态链接器,将F文件和程序文件链接起来,生成一个可执行文件。即,有几个需要使用它的程序,就链接几次。效率低下。
调用_stdcall文件
磁盘的物理结构
磁盘通过将物理表面划分为多个空间来提高使用效率。
两种方式:
扇区方式
将磁盘划分为多个固定长度的空间的方式。
磁道:将磁盘表面划分为多个同心圆的空间。
扇区:磁道上按固定大小(存储数据的长度相同)划分的空间。