5.内存和磁盘的亲密关系 benben Posted on Feb 7 2023 《程序是怎样跑起来的》 ##5.1 不读入内存就无法运行 计算机的工作方式就是存储程序工作方式,把事先编辑好的程序放入计算机,用计算机本身存储一些数据,再调用这些程序完成一系列的操作。 程序保存在存储设备中,通过有序得被读出来实现运行,这一机制称为**存储程序方式**。 计算机中主要的存储部件是内存和磁盘。磁盘中存储的程序,必须要加载到内存后才能运行。在磁盘中保存的原始程序无法直接运行的。 这是因为,负责解析和运行程序的CPU,需要通过内部程序计数器来指定内存地址,然后才能读出程序。 ##5.2 磁盘缓存加快了磁盘访问速度 **磁盘缓存**指的是把从磁盘中读出的数据存储到内存空间中的方式。这样一来,当接来下需要读取同一数据时,就不用通过实际的磁盘,而是从磁盘缓存中把内容读出。 **磁盘缓存**是假想的磁盘(实际上是内存)。 磁盘缓存提高访问速度的机制  ##5.3 虚拟内存把磁盘作为部分内存来使用 **虚拟内存**是指把磁盘的一部分作为假想的内存来使用。(实际上是硬盘) CPU只能执行加载到内存中的程序。虚拟内存虽说是把磁盘作为内存的一部分来使用,但实际上正在运行的程序部分,在这个时间点上是必须存在内存中的。 也就是说,为了实现虚拟内存,就必须把**实际内存**(也可称为**物理内存**)的内容,和磁盘上的虚拟内存的内容进行置换(swap),并同时运行程序。 操作系统虚拟内存调度方式有分页式、分段式、段页式。 ##5.4 节约内存的编程方法 1. DLL(Dynamic Link Library)文件,顾名思义,是在程序运行时可以动态加载Librar(函数和数据的结合)文件。此外,多个应用可以共有一个DLL文件。而通过共有同一个DLL文件则可以达到节约内存的效果。 * 静态链接导致内存利用效率下降  * 进行动态链接的话即可节约内存  * 而且DLL文件还有一个优点就是,在不变更EXE文件的情况下,只通过升级DLL文件就可以更新。 2. 通过调用_stdcall来减小程序文件的方法,使用C语言编写应用时可以利用的高级技巧。这一思路也可以应用在其他编程语言中。 * C语言中,在调用函数后,需要执行栈清理处理指令。**栈清理处理**是指,把不需要的数据从接收和传递函数的参数时使用的内存上的栈区域中清理出去。该命令不是程序记述的,而是在程序编译时由编译器自动附加到程序中的。编译器默认将该处理附加在函数调用方。 * 在被调用方进行清理处理可节约内存  ##5.5 磁盘的物理结构 磁盘的物理结构是指磁盘存储数据的形式。 磁盘是通过把其物理表面划分成多个空间来使用的。划分的方式有**扇区方式**和**可变长方式**两种,前者是将磁盘划分为固定长度的空间,后者则是指把磁盘划分为长度可变的空间。 赠人玫瑰,手留余香 赏 Wechat Pay Alipay 6.亲自尝试压缩数据 4.熟练使用有棱有角的内存