(摘抄自https://www.zhihu.com/question/51836333)性能
处理内存碎片的方法:使用基于页面的内存管理方式。优化
内存碎片是如何出现的?操作系统
当使用最原始的标记分配方法分配内存时,系统须要维护一个简单的内存信息表:翻译
当程序申请一个长度为3的内存空间后:3d
当程序再申请一个长度为2,以及长度为4的内存空间后:blog
此时,只剩1个可用空间。若是这时程序再来申请长度大于1的空间,就申请不了,也就是内存不够。ip
如今,释放掉ID=2的空间:内存
咱们发现,如今可用内存空间为3,可是,这3个空闲空间,并非连续的。因此,若是程序如今申请长度为3的内存空间,一样会申请不了,会出现内存不够。业界把这种状况,称之为【内存碎片】。get
基于页面的内存管理方式:内存管理
首先,把物理内存,按照某种尺寸,进行平均分割。好比我如今以2个内存单位,来分割内存,也就是每两个连续的内存空间,组成一个内存页:
接着,系统一样须要维护一个内存信息表:
如今,程序申请长度为3的内存空间,不过因为如今申请的最小单位为页面,而一个页面的长度为2,所以如今须要申请2个页面,也就是4个内存空间。你看,这就浪费了1个内存空间。
以上就是基本原理,实际系统中会作很是多的优化。目前各类主流操做系统都是分页的方式,所以你不须要太关心碎片。
这个话题再延伸下去,就是一个程序内部的局部内存池了。不过这是另外一个问题,喜欢的话能够深究一下。 做者:匿名用户 连接:https://www.zhihu.com/question/51836333/answer/145693402 来源:知乎 著做权归做者全部。商业转载请联系做者得到受权,非商业转载请注明出处。