内存分段是如何产生内存碎片的

内存分段
程序包含若干个逻辑分段,如可由代码段、数据段、栈段、堆段组成,每个分段都有不同的属性,所以内存以分段的形式把这些段分离出来进行管理
在内存分段方式下,虚拟地址和物理地址是如何映射的?
分段管理下的虚拟地址由两部分组成,段号和段内偏移量
通过段号映射段表的项
从项中获取到段基地址
段基地址+段内偏移量=使用的物理内存
通过上述知道了,使用段号去映射段表的项,使用项中的段基地址与偏移量计算出物理内存地址,但实际上,分段方式会把程序的虚拟地址分为4段,每个段在段表中有一个项,在这一项找到段的基地址,再加上偏移量计算出物理内存地址
分段的方式,很好的解决了,程序本身不需要关心具体物理内存地址的问题,但是它仍有不足之处:
内存碎片的问题
内存交换的效率低的问题
接下来对这两个问题进行分析
分段方式是如何产生内存碎片的?
在说内存碎片之前,还是先弄明白,什么是内存碎片?,8个人去外面吃饭,因为饭点原因,人比较多,剩下的都是4人小餐桌,这些4人小餐桌就是我们所说的内存碎片,此时会有小伙伴说,把2个4人小餐桌拼凑在一起就解决了这个问题,非常简单,我们把这种方式称为内存碎片整理(涉及到内存交换)。
回到正题,我们来看一例子,假设物理内存只有1gb (1024mb),用户电脑上运行了多个程序:
浏览器占用128mb
音乐软件占用256mb
游戏占用了512mb
这个时候我们关闭浏览器,剩余物理内存1024mb -(256mb+512mb)=256mb。但是这剩余的256mb物理内存不是连续的,被分为了两段128mb,导致没有空间再打开一个200mb的程序,如下图所示
这里的内存碎片问题共有两点:
外部内存碎片,就是多个不连续的小物理内存空间,导致新的程序无法被装载
内部内存碎片,程序所有的内存都被装载进了物理内存,但是程序有部分的内存,可能不经常使用,造成内存的浪费
解决外部内存碎片的方法就是使用内存碎片整理
内存碎片整理通过内存交换的方式来实现,我们可以把音乐软件占用的256mb加载到硬盘上面去,再从硬盘读取回来,但是读取回来的位置不再是原来的位置,而是紧跟已经占用的游戏512mb后面,这样两个128mb的空闲物理内存就合并成了一个256mb的连续物理内存,于是新的200mb新程序就能被装载进来
内存交换空间,在 linux 系统里,是我们常看到的 swap 空间,这块空间是从硬盘划分出来的,用于内存与硬盘的空间交换。
分段方式为什么内存交换效率低?首先分段管理容易造成内存碎片,导致内存交换的频率较高,因为硬盘的访问速度比内存慢太多了,然后每次交换的时候,把一大段连续的内存写入到硬盘,再又从硬盘读取出来,如果交换的是一个占内存空间很大的程序,这样整个机器都会显得卡顿,过程也很慢的,所以说分段方式内存交换效率低。
为了解决内存分段管理造成的内存碎片与内存交换效率低的问题,就出现了内存分页。

QPF4656和QPF4730 Wi-Fi 6/6E前端模块FEM介绍
嵌入式工控机在视频监控领域有哪一些应用
OPPO独立后的子品牌Realme昨天正式在印度发布了新品
优特美尔携手中国星坤拓展国内市场,星坤产品已在优特美尔产品库上线!
软启动的原理及应用
内存分段是如何产生内存碎片的
首届工业数据要素大会 | 梦想人完成数字化转型战略合作签约仪式
相比新能源汽车,智能网联汽车发展会更快
锻造去氧化皮机器
如何选择适合的3D机器视觉检测
Mobileye和台湾启碁科技合作生产成像雷达
罗德与施瓦茨凭借全新R&S NGU进入源测量单元市场
防水连接器表层涂层的作用
九号机器人E/C系列新国标电动车开启预约,拥有三重定位防盗系统
3D可视化打造节能减排绿色虚拟电厂,开启电力元宇宙高阶模式
迅速带你了解pcb板材电路板性能及其特点
RFID技术怎样在食品行业应用
如何寻找区块链未来成长空间
全球市场份额中国通信设备下降到39.2%
燃气表液晶屏选型