第5章内存和磁盘的亲密关系
内存利用电流实现:高速高价,磁盘利用磁效实现:低速低价
磁盘中存储的程序:必须加载到内存中才能运行,因为负责解释和运行程序内容的CPU需要通过内部程序计数器来指定内存地址,然后才能读出程序,其次,磁盘的速度慢即使可以直接读取,效率也比较低下
内存与磁盘相互促进:磁盘缓存:加快磁盘访问速度(磁盘读出的数据保存到内存,下次读取同一数据直接内存读取)虚拟内存:把磁盘作为部分内存使用,在内存不足时也可以运行程序
虚拟内存的实现方式:虚拟内存虽说是将磁盘当内存一部分使用,但实际上在正在运行的程序部分,在这个时间点上是必须存在内存中的,也就是说为了实现虚拟内存,就必须把实际内存的内容和磁盘上的虚拟内存的内容进行部分置换(swap),并同时运行程序
虚拟内存的方法有分页式,分段式两种,windows使用的是分页式
分页技术:在不考虑程序构造的情况下,把运行的程序按照一定大小的页进行分割,并以页为单位在内存和磁盘间进行置换,把磁盘内容读取到内存成为Page in ,内存内容写入到磁盘称为Page ou t,在win中页大小为4kb,也就是只将大程序分割为4kb大小的页进行切分,并以页为单位放入磁盘或内存
分段技术:把要运行的程序分割成以处理集合及数据集合等为单位的段落,然后在以分割后的段落为单位在内存和磁盘间进行置换
虚拟内存的大小:通常为实际内存的相同大小或者两倍程度
节约内存的方法:1、动态DLL链接文件:通过DLL文件实现函数共有:DLL(动态链接文件),可以在程序运行时动态加载的库文,多个应用可以共有同一个DLL文件,通过共有,可以实现节约内存的效果
静态链接在各个应用程序中,内置库文件函数(成为了应用执行程序的一部分),同时运行各应用时,内存会存在具有同一库文件函数的多个程序,这会降低内存的利用效率,DLL动态链接作为独立的文件而不是应用的执行文件,由于在内存中可以被多个应用共有,因此该DL L函数在内存中只存在一个,从而实现了节约内存,同时,DLL文件还可以以在不变更应用执行文件情况下,通过只升级DLL文件就可实现程序的更新。
2、使用_stdcall标准调用减小程序文件大小
函数在调用完毕后,执行栈清理使用_stdcall调用方式,将该栈清理实现在被调用函数一方进行清理,栈清理处理在被调用方进行比在调用方进行程序整体要小一些,同时避免了在调用方程序存在多处调用时反复进行重复清理操作(在被调用方所有调用结束后,只需要执行一次清理)
磁盘的物理结构:是指磁盘存储数据的形式,磁盘通过把其物埋表面划分为多个空间来使用,划分的方式有扇区方式和可变成方式两种:1扇区方式:将磁盘划分为固定长度的空间2可变长方式:把磁盘划分为长度可变的空间
windows中一般使用的扇区划分方式,扇区方式中,把磁盘表面分成若干个同心圆的空间就是磁道,把磁道按照固定大小(能存储的数据长度相同)划分而成的空间就是扇区,扇区是对磁盘物理读取的最小单位,win中一般一个扇区512字节,不过逻辑方面,windows对磁盘的读写单位是扇区的整数倍簇,1簇可以W为512或1024或者其它的,磁盘容量越大,簇的容量越大
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)