全球最实用的IT互联网信息网站!

AI人工智能P2P分享&下载搜索网页发布信息网站地图

当前位置:诺佳网 > 电子/半导体 > 存储技术 >

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

时间:2023-10-09 16:28

人气:

作者:admin

标签: 程序  硬盘 

导读:内存分段 程序包含若干个逻辑分段,如可由代码段、数据段、栈段、堆段组成,每个分段都有不同的属性,所以内存以分段的形式把这些段分离出来进行管理 在内存分段方式下,虚拟地...

内存分段

程序包含若干个逻辑分段,如可由代码段、数据段、栈段、堆段组成,每个分段都有不同的属性,所以内存以分段的形式把这些段分离出来进行管理

在内存分段方式下,虚拟地址和物理地址是如何映射的?

分段管理下的虚拟地址由两部分组成,段号和段内偏移量

图片

通过段号映射段表的项

从项中获取到段基地址

段基地址+段内偏移量=使用的物理内存

通过上述知道了,使用段号去映射段表的项,使用项中的段基地址与偏移量计算出物理内存地址,但实际上,分段方式会把程序的虚拟地址分为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 空间,这块空间是从硬盘划分出来的,用于内存与硬盘的空间交换。

分段方式为什么内存交换效率低?首先分段管理容易造成内存碎片,导致内存交换的频率较高,因为硬盘的访问速度比内存慢太多了,然后每次交换的时候,把一大段连续的内存写入到硬盘,再又从硬盘读取出来,如果交换的是一个占内存空间很大的程序,这样整个机器都会显得卡顿,过程也很慢的,所以说分段方式内存交换效率低。

为了解决内存分段管理造成的内存碎片与内存交换效率低的问题,就出现了内存分页。

温馨提示:以上内容整理于网络,仅供参考,如果对您有帮助,留下您的阅读感言吧!
相关阅读
本类排行
相关标签
本类推荐

CPU | 内存 | 硬盘 | 显卡 | 显示器 | 主板 | 电源 | 键鼠 | 网站地图

Copyright © 2025-2035 诺佳网 版权所有 备案号:赣ICP备2025066733号
本站资料均来源互联网收集整理,作品版权归作者所有,如果侵犯了您的版权,请跟我们联系。

关注微信