代码改变世界

《程序是怎样跑起来的》第五章

2019-03-24 22:11  薛肖肖  阅读(156)  评论(0编辑  收藏  举报

本章主要讲解了磁盘和内存之间的亲密关系,因为CPU只运行和解析内存中的程序和数据。

第一部分就讲述数据部读入内存就无法运行。书中介绍了储存程序方式,是我们都能够理解的,有序的读出储存的程序运行;就像我们去图书馆借书一样,先按照类别,在按照拼音首字母去找到我们想要的书,我们不可能乱找。

接下来通过两个示例说明磁盘和内存之间的关系:磁盘缓存加快了磁盘访问速度、虚拟内存把磁盘作为部分内存来使用。

磁盘缓存(把低速设备的数据保存到高速设备中),虽说是缓存,其实已经把磁盘中的数据存到了内存中了,作者举了web浏览器的例子来进一步说明,我想百度应该也是这样。我们把钱放进银行卡里边,就可以直接在网上使用了;银行卡到使用之间的过程就叫磁盘缓存,手机使用时就是CPU读取并运行。

虚拟内存是假想的内存(磁盘),虚拟内存的最大优点就是在内存不足时也可以运行程序。虚拟内存其实是把数据储存在磁盘上面,但其实正在运行的程序在运行时依然是在内存里面。它的虚拟就在于,使用时是在内存上面,没有使用的在磁盘里面。Windows采用的是页文件的方式进行虚拟内存,以一页4KB对数据进行分页储存。虚拟内存就好比很多的证书,没有用的时候就放在家里,有用的时候就及时拿出使用。

下面又接着介绍节约内存的编程方法:(1)通过DLL文件实现函数共有(2)通过调用_stdcall来减小程序文件的大小。

DLL文件优点在于同一个DLL文件的内容在运行时可以被多个应用共用,这就减少了多个相似文件的重复储存;还有就是在不变更EXE稳健的情况下,只通过升级DLL文件就可以更新了。我们下载在手机里的输入法,我们无论在哪里输入文字时都可以使用(除了有时候输入密码时会使用安全键盘,当然这也是可以设置的。)。

_stdcall方法可以减小程序文件的大小,在使用它之后要执行栈清理处理指令。栈清理处理,就是把不需要的数据从接收和传递函数的参数时使用的内存上的栈区域清理出去。其实这么说有点不好理解,就像我们用手机下载一些软件会使用安装包,但是软件下载完成之后就会把安装包清理掉是一样的。

最后讲述了磁盘的物理结构。详细的讲解了windows使用的扇区划分方式。介绍了簇,不同的文件不可以储存在同一个簇中,保证运行的效率。簇的大小定了以后,无论一个簇有多大的空间没有被使用,它都将不再被使用;这就好比装东西,你往杯子里边到了半杯水,你就不会再往这杯子里倒可乐一样。

作者一步一步引导我们理解计算机,从外到内,从简到详。