读《程序是怎么跑起来的》第5章
Posted gltks
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了读《程序是怎么跑起来的》第5章相关的知识,希望对你有一定的参考价值。
现在计算机采用的是存储程序方式,在存储装置中保存程序,并逐一运行的方式。磁盘缓存是指从磁盘中读取的数据存储在内存中,当该数据再次被读取时,不是从磁盘而是直接从内存中高速读取。借助虚拟内存,哪怕是内存容量不足的计算机,也可以运行很大的程序。DLL是Dynamic Link Library的简称。函数的加载方式有静态链接和动态链接两种。扇区是磁盘保存数据的物理单位。计算机主要的存储部件是内存和磁盘。磁盘中存储的程序,必须要加载到内存后才能运行。在磁盘中保存的原始程序是无法直接运行的。这是因为,负责解析和运行程序内容的CPU,需要通过内部程序计数器来指定内存地址,然后才能读出程序。即使CPU可以直接读出并运行磁盘中保存的程序,由于磁盘读取速度慢,程序的运行速度还是会降低。总之,存储在磁盘中的程序需要读入到内存后才能运行。
磁盘高速缓存是一种用来加快磁盘访问的高速RAM,可以是磁盘驱动器本身的一部分(有时称为硬盘缓存或缓冲),也可以是计算机中为磁盘预留的RAM(有时称为软盘高速缓存)。硬盘缓存更加高效,但也昂贵得多,因此容量较小。所有当今的磁盘几乎都包括内部缓存。
虚拟内存是为了多任务内核提供的内存管理技术,它使得应用程序,因为他拥有连续的可用的内存,而实际上它通常是成多个物理内存碎片,还有部分暂时存储在外部磁盘存储器上,在需要时进行数据交换。与没有使用虚拟内存技术的系统相比,使用这种技术的系统使得大型程序的编写变得更加容易,对真正的物理(RAM)的使用也更有效率。对虚拟内存的定义是基于对地址空间的重定义的,即把地址空间定义为“连续的虚拟内存地址”,借此“欺骗”程序,使它们以为自己正在使用一大块的“连续”地址。
1、虚拟内存使用硬盘来模拟内存。
2、虚拟内存的目的是扩大寻址空间,增加程序可用的地址集合。
3、为方便实现虚拟内存,操作系统将虚拟内存划分成若干页面,每个页面大小固定,存储在硬盘上。当需要页面时,操作系统将其从硬盘复制到内存,将虚拟地址转换为真实地址。
4、将虚拟内存转换为真实地址的过程称为映射;将虚拟页面从硬盘复制到内存的过程称为页面调度或交换。
节约内存编程的方法:
1、通过DLL文件实现函数共享。
2、通过调用_stdcall来减少程序文件的大小:C语言中,在调用函数后,需要执行栈清理处理指令。栈清理处理是指,把不需要的数据从接收和传递函数的参数时使用的内存上的栈区域中清理出去。该命令不是程序记述的,而是在程序编译时由编译器自动附加到程序中。编译器默认将该处理附加在函数调用方。通过在函数名加上_stdcall,就可以把栈清理处理变为在被调用函数一方。
磁盘是通过把其物理表面划分成多个空间来使用的。划分的方式有扇区方式和可变长方式两种,前者是指将磁盘划分为固定长度的空间,后者则是把磁盘划分为长度可变的空间。一般windows系统计算机所使用的硬盘,采用的都是扇区方式。扇区方式中,把磁盘表面分成若干个同心圆的空间就是磁道,把磁道按照固定大小(能存储的数据长度相同)划分而成的空间就是扇区。扇区是对磁盘进行物理读写的最小单位。Windows中使用的磁盘,一般1个扇区是512字节。不过,Windows在逻辑方面(软件方面)对磁盘进行读写的单位是扇区整数倍簇。根据磁盘容量的不同,1簇可以是512字节(1簇=1扇区)、1KB(1簇=2扇区)、2KB、4KB、8KB、16KB、32KB(1簇=64扇区)。磁盘的容量越大,簇的容量也越大。以簇为单位进行读写时,1簇中没有填满的区域会保持不被使用的状态。虽然这看起来是有点浪费,不过该机制就是如此规定的,所以我们也没有什么好办法。另外,如果减少簇的容量,磁盘访问次数就会增加,就会导致读写文件的时间变长。由于在磁盘表面上,表示扇区区分的领域是必要的。因此,如果簇的容量过小,磁盘的整体容量也会减少。扇区和簇的大小,是由处理速度和存储容量的平衡来决定的。
现在计算机采用的是存储程序方式,在存储装置中保存程序,并逐一运行的方式。磁盘缓存是指从磁盘中读取的数据存储在内存中,当该数据再次被读取时,不是从磁盘而是直接从内存中高速读取。借助虚拟内存,哪怕是内存容量不足的计算机,也可以运行很大的程序。DLL是Dynamic Link Library的简称。函数的加载方式有静态链接和动态链接两种。扇区是磁盘保存数据的物理单位。计算机主要的存储部件是内存和磁盘。磁盘中存储的程序,必须要加载到内存后才能运行。在磁盘中保存的原始程序是无法直接运行的。这是因为,负责解析和运行程序内容的CPU,需要通过内部程序计数器来指定内存地址,然后才能读出程序。即使CPU可以直接读出并运行磁盘中保存的程序,由于磁盘读取速度慢,程序的运行速度还是会降低。总之,存储在磁盘中的程序需要读入到内存后才能运行。
磁盘高速缓存是一种用来加快磁盘访问的高速RAM,可以是磁盘驱动器本身的一部分(有时称为硬盘缓存或缓冲),也可以是计算机中为磁盘预留的RAM(有时称为软盘高速缓存)。硬盘缓存更加高效,但也昂贵得多,因此容量较小。所有当今的磁盘几乎都包括内部缓存。
虚拟内存是为了多任务内核提供的内存管理技术,它使得应用程序,因为他拥有连续的可用的内存,而实际上它通常是成多个物理内存碎片,还有部分暂时存储在外部磁盘存储器上,在需要时进行数据交换。与没有使用虚拟内存技术的系统相比,使用这种技术的系统使得大型程序的编写变得更加容易,对真正的物理(RAM)的使用也更有效率。对虚拟内存的定义是基于对地址空间的重定义的,即把地址空间定义为“连续的虚拟内存地址”,借此“欺骗”程序,使它们以为自己正在使用一大块的“连续”地址。
1、虚拟内存使用硬盘来模拟内存。
2、虚拟内存的目的是扩大寻址空间,增加程序可用的地址集合。
3、为方便实现虚拟内存,操作系统将虚拟内存划分成若干页面,每个页面大小固定,存储在硬盘上。当需要页面时,操作系统将其从硬盘复制到内存,将虚拟地址转换为真实地址。
4、将虚拟内存转换为真实地址的过程称为映射;将虚拟页面从硬盘复制到内存的过程称为页面调度或交换。
节约内存编程的方法:
1、通过DLL文件实现函数共享。
2、通过调用_stdcall来减少程序文件的大小:C语言中,在调用函数后,需要执行栈清理处理指令。栈清理处理是指,把不需要的数据从接收和传递函数的参数时使用的内存上的栈区域中清理出去。该命令不是程序记述的,而是在程序编译时由编译器自动附加到程序中。编译器默认将该处理附加在函数调用方。通过在函数名加上_stdcall,就可以把栈清理处理变为在被调用函数一方。
磁盘是通过把其物理表面划分成多个空间来使用的。划分的方式有扇区方式和可变长方式两种,前者是指将磁盘划分为固定长度的空间,后者则是把磁盘划分为长度可变的空间。一般windows系统计算机所使用的硬盘,采用的都是扇区方式。扇区方式中,把磁盘表面分成若干个同心圆的空间就是磁道,把磁道按照固定大小(能存储的数据长度相同)划分而成的空间就是扇区。扇区是对磁盘进行物理读写的最小单位。Windows中使用的磁盘,一般1个扇区是512字节。不过,Windows在逻辑方面(软件方面)对磁盘进行读写的单位是扇区整数倍簇。根据磁盘容量的不同,1簇可以是512字节(1簇=1扇区)、1KB(1簇=2扇区)、2KB、4KB、8KB、16KB、32KB(1簇=64扇区)。磁盘的容量越大,簇的容量也越大。以簇为单位进行读写时,1簇中没有填满的区域会保持不被使用的状态。虽然这看起来是有点浪费,不过该机制就是如此规定的,所以我们也没有什么好办法。另外,如果减少簇的容量,磁盘访问次数就会增加,就会导致读写文件的时间变长。由于在磁盘表面上,表示扇区区分的领域是必要的。因此,如果簇的容量过小,磁盘的整体容量也会减少。扇区和簇的大小,是由处理速度和存储容量的平衡来决定的。
以上是关于读《程序是怎么跑起来的》第5章的主要内容,如果未能解决你的问题,请参考以下文章