磁盘与内存
程序的运行方式
磁盘中存储的应用程序必须加载到内存中才能执行,这是因为解析和运行程序的 CPU 需要通过程序计数器指定内存地址来读取程序指令的。
磁盘与内存
磁盘是用来存储应用程序和数据的,低速廉价,断电数据不会丢失,常见的就是硬盘。内存也是用来存放数据和应用程序的,是靠电流实现的,断电内存里面的数据会丢失,高速并且造价昂贵。有兴趣的可以看下内存 IC,其通过 IC 引脚来表示电源,数据位,地址位,读写标志位等数据,比如地址位有10个引脚,那么该内存 IC 就能存取 1KB 的数据。按照现在 G 级别的内存使用来看,一个内存的 IC 引脚有多少就不必多说了,毕竟我们不能搞这么多内存 IC,只能从添加引脚上下功夫了。
磁盘缓存
在开发 web 应用程序的过程中,我们经常用到缓存,用高速设备来存储经常会有到的数据。表现在磁盘缓存其实就是拿一部分内存作为磁盘,程序访问相应的数据时先从看看磁盘缓存中有没有,如果缓存命中,那么直接读内存,就不用读低速度的磁盘了。听上面这么一说和内核缓冲区有点相似。
虚拟内存
计算机中运行的进程是非常多的,我们往往看到内存只剩下几百M的时候,也可以运行占用内存G级别的程序,操作系统并没有因为内存不足而崩溃,这是为什么呢?其实就是虚拟内存,把磁盘的一部分划分给内存使用。copy 一段话
虚拟内存是计算机系统内存管理的一种技术。它使得应用程序认为它拥有连续可用的内存(一个完整的地址空间),但是实际上,它通常被分割成多个物理碎片,还有部分存储在外部磁盘管理器上,必要时进行数据交换。
说到了数据交换,虚拟内存是如何与内存进行数据交换的呢?有分页和分段2种,具体还要在看看
如何节约内存
上面说到了内存高速但是昂贵,那么该如何节省内存资源呢?
- 上面说到的虚拟内存是一种办法,但是其涉及到低速的磁盘访问和数据交换。
- 想想上面讲到的东西,内存是用来干什么的,加载应用程序和数据的,内存的物理表现形式就是内存IC,所以我们有2个方面来节约内存,一减小程序大小,二增加 IC 引脚,加内存。加内存涉及到 money,还是说说我们是怎么减小程序的大小的吧
- stdcall 标准调用来减少内存的使用,具体是怎么个情况呢?我们在编写程序时,往往会提供一些公共函数用于在多个地方重复调用。在调用函数完成的时候,需要清理函数参数以及所处理的数据的栈区域。难道我们每次调用函数都需要栈清理吗? _stdcall 就是这样的东西,只在我们反复调用该函数的地方触发栈清理,而不用每次这样做,通过减少栈清理的开销来减小程序运行所需要的内存