信息的表示和处
信息的存储
大多数计算机使用8位的块,或者字节,作为最小的可寻址的存储器单位,而不是在存储器中访问单独的位。机器级程序将存储器是为一个非常大的字节数组,称为虚拟存储器。存储器的每个字节都由一个唯一的数字来标识,称为地址。所有可能的地址集合称为虚拟地址空间。
虚拟地址空间只是一个展现给机器级程序的概念性映像。实际的实现是将随机访问存储器ram、磁盘存储器、特殊硬件和操作系统软件结合起来,为程序提供一个看上去统一的字节数组。
优化程序性能
消除循环的低效
减少过程的调用
存储器的层次结构
我们可以建立一个简单的计算机系统模型。Cpu执行指令,而存储器系统为cpu存放指令和数据。在这个模型中,存储器系统是一个线性的字节数组,cpu能够在常数时间内访问每个存储器位置。这是个有效的模型,但其没有反映系统实际工作的方式。
实际上,存储器是一个具有不同容量、成本和访问时间的存储设备的层次结构。高层次存储器速度快,成本高;低层次速度慢,成本低。整体效果是一个大的存储器池,其成本与层次结构底层最便宜的存储设备相当,但是却以接近于层次结构顶部存储设备的高速率向程序提供数据。
如果你的程序需要的数据在cpu的寄存器中,那么在0个cpu周期就能访问到,如果在高速缓存中需要1-30个周期,如果在主存中需要50-200个周期,如果在磁盘上需要约几千万个周期。
思想:如果你了解系统是如何将数据在存储器层次结构中上上下下移动的,那么你就可以编写你的应用程序,使得它们的数据项存储在层次结构中较高的地方,在那里cpu能更快地访问到它们。即程序的局部性locality。
局部性思想: 局部性通常有两种不同的形式即时间局部性和空间局部性。在一个具有良好的时间局部性的程序中,被引用过一次的存储器位置很可能在不远的将来再被多次引用。在一个具有良好空间局部性程序中,如果一个存储器位置被引用了一次,那么程序很可能在不愿的将来引用附近的一个存储器位置。局部性原理在应用程序的设计中扮演着重要的角色。如web浏览器将最近被引用的文档放在本地磁盘上,利用的就是时间局部性。