《程序是怎么跑起来的》第5章
第五章节中,主要讲诉内存与磁盘的密切关系。本章我学习了为了加快了磁盘访问速度所以有了磁盘缓存,磁盘缓存是把从磁盘中读出的数据存储到内存中的方式,内存当做磁盘的缓存。不过现在好像已经有了新技术。虚拟内存把磁盘作为部分内存来使用,
上一小节是把内存中的一部分当做磁盘,这里是把一部分磁盘当做内存。但要记得正在运行中的程序一定是在内存中的,所以被存储到虚拟内存(磁盘)中的内存数据属于当前没在运行中的程序。虚拟内存的交换方法有两种:分页式、分段式,主要区别就是交换数据的大小不同,Windows采用分页式,页大小是4KB,数据由磁盘到内存的过程称为Page In,由内存到磁盘的方式称为Page Out虚拟内存在Windows中也可以叫作页文件
节约内存的编程方法:
使用DLL文件(Dynamic Link Library)达到多个程序共享同一函数的效果,这样内存中就不会出现同一个代码实现属于两个程序的情况。用DLL还有一个好处是可以在不修改exe文件的情况下,通过对DLL的更新来更新程序中的功能。更多DLL内容见第8章
C语言中,在函数声明时加入_stdcall,可以达到在函数被调用完后,被调用函数自己清理内存栈中的数据,而不是由调用方来来清除,这样如果函数被调用多次的话,就可以减少调用方的清理内存栈代码
磁盘的物理结构:
扇区是对磁盘进行物理读写的最小单位,一般是521KB;簇是Windows对磁盘读写的最小单位,簇要求是扇区的整数倍,具体1簇等于多少扇区,要根据处理速度和存储容量来权衡确定;如果文件大小没有达到1簇,那么磁盘中也会占用1簇的空间,剩下的部分也不能存其他的信息了,只能空着,这感觉和Linux中的块是一个概念
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异