内存利用电流实现:高速高价,磁盘利用磁效实现:低速低价
磁盘中存储的程序:必须加载到内存中才能运行,因为负责解释和运行程序内容的CPU需要通过内部程序计数器来指定内存地址,然后才能读出程序,其次,磁盘的速度慢即使可以直接读取,效率也比较低下。
内存与磁盘相互促进
磁盘缓存: 加快磁盘访问速度(磁盘读出的数据保存到内存,下次读取同一数据直接内存读取)。
虚拟内存: 把磁盘作为部分内存使用,在内存不足时也可以运行程序。
虚拟内存的实现方式:
虚拟内存虽说是将磁盘当内存一部分使用,但实际上在正在运行的程序部分,在这个时间点上是必须存在内存中的,也就是说为了实现虚拟内存,就必须把实际内存的内容和磁盘上的虚拟内存的内容进行部分置换(swap),并同时运行程序。
虚拟内存的方法有分页式,分段式两种,windows 使用的是分页式。
分页技术: 在不考虑程序构造的情况下,把运行的程序按照一定大小的页进行分割,并以页为单位在内存和磁盘间进行置换,把磁盘内容读取到内存成为Page in ,内存内容写入到磁盘称为Page out,在 win 中页大小为 4kb,也就是只将大程序分割为 4kb 大小的页进行切分,并以页为单位放入磁盘或内存。
分段技术: 把要运行的程序分割成以处理集合及数据集合等为单位的段落,然后在以分割后的段落为单位在内存和磁盘间进行置换。
虚拟内存的大小: 通常为实际内存的相同大小或者两倍程度。
1、动态 DLL 链接文件:
通过 DLL 文件实现函数共有:DLL(动态链接文件),可以在程序运行时动态加载的库文件(函数和数据的集合),多个应用可以共有同一个 DLL 文件,通过共有,可以实现节约内存的效果。
静态链接在各个应用程序中,内置库文件函数(成为了应用执行程序的一部分),同时运行各应用时,内存会存在具有同一库文件函数的多个程序,这会降低内存的利用效率,DLL 动态链接作为独立的文件而不是应用的执行文件,由于在内存中可以被多个应用共有,因此该 DLL 函数在内存中只存在一个,从而实现了节约内存,同时,DLL 文件还可以以在不变更应用执行文件情况下,通过只升级 DLL 文件就可实现程序的更新。
2、 使用-stdcall 标准调用减小程序文件大小
函数在调用完毕后,执行栈清理使用_stdcall调用方式,将该栈清理实现在被调用函数一方进行清理,栈清理处理在被调用方进行比在调用方进行程序整体要小一些,同时避免了在调用方程序存在多处调用时反复进行重复清理操作(在被调用方所有调用结束后,只需要执行一次清理)。