失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > 磁盘与内存的亲密关系 -磁盘缓存和虚拟内存

磁盘与内存的亲密关系 -磁盘缓存和虚拟内存

时间:2019-05-04 17:33:26

相关推荐

磁盘与内存的亲密关系  -磁盘缓存和虚拟内存

内存和磁盘的亲密关系

1.前提

内存与磁盘都是存储部件,内存利用电流来存储、磁盘利用磁效应来存储。内存高速高价,磁盘低速廉价。

存储在磁盘中的程序必须先加载到内存中才能运行。这是因为cpu需要程序计数器指定内存地址,然后才能读出程序来运行。即使可以从磁盘中读取,程序的运行速度还是会降低。

2.磁盘缓存

磁盘缓存指把磁盘中的数据读出并存储在内存中,这样下次再要读取相同的数据时,只需到磁盘缓存中读取,提升了磁盘数据的访问速度。

windows操作系统中就提供了磁盘缓存机制,但随着硬盘访问速度的提高,磁盘缓存效果也没之前明显。

但把低速设备的数据保存在高速设备中,需要时直接从高速设备读取,这种缓存机制在其他情况下也会用到;比如cache高速缓冲存储器、标准I/O的缓冲区等。

3.虚拟内存

虚拟内存指把磁盘的一部分当做假想的内存来使用。借助虚拟内存,在内存不足时也可以运行程序;

cpu只能运行加载到内存中的程序,所以为了实现虚拟内存,就必须将实际内存的内容和磁盘上虚拟内存的内容进行置换。就相当于流水线,一边运行一边从磁盘向内存加载程序。

windows操作系统中就提供了虚拟内存机制。虚拟内存方法有分页式和分段式,而windows使用的是分页式。指不考虑程序构造,将程序按一定大小的页(page)进行分割,并以页为单位与磁盘置换; windows计算机一般的页大小是4KB。

page in : 磁盘到内存page out : 内存到磁盘

windows在磁盘上提供了虚拟内存用的文件( page file),文件大小就是虚拟内存大小,一般为实际内存的一倍到两倍。

4.节约内存的编程方法

虚拟内存虽然可以一定程度解决内存不足的情況,但 page in和 page out也会让运行程序变慢;要想从根本上解决内存不足问題,要不增加内存容量,要不尽量将运行文件变小;

1)通过DLL文件实现函数共有

多个应用共有一个DLL文件,这样就可以节约内存。 windows其实也是多个DLL文件的集合体。

2)调用_ stdcall来减小程序文件大小

c语言中,在调用函数后,会执行栈清理处理指令,将不需要的数据从函数传参时用到的栈区中清理出去。

该命令是编译器自动加到程序中的,默认加到函数调用方。比如在main函数中调用其它函数,就会加到main函数方。但是,如果main函数中调了同一个函数多次,就会处理多次,造成内存浪费。

在函数前加_ stdcall,可以把栈处理变成在被调函数一方进行。

5.磁盘的物理结构

磁盘将物理表面划分成多个空间来使用,有扇区方式和可变长方式,一般windows计算机的硬盘和软盘都是扇区方式。

扇区是对磁盘进行物理读写的最小单位,windows中1个扇区是512字节。不过在软件方面对磁盘读写的单位是簇,簇是扇区的整数倍。不同文件不能存在同一簇中,所以一个文件就算再小也占一个簇,没被填满的区域会保持不被使用的状态。

6.说明

本文为《程序是怎样跑起来的》读书笔记,如有错误,请兄弟们指正,大家一起进步!

如果觉得《磁盘与内存的亲密关系 -磁盘缓存和虚拟内存》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。