综述
内存管理主要包括:连续内存管理、分页、分段。
其中分页是不会产生外碎片的(很好理解,因为页是等大的);
分段是不会产生内碎片的。
这里给出一些资料的分析
分析
内部碎片就是为每个进程分布的内存空间之中所没有被使用到的内存碎片。通常出现在分页式存储管理之中。分页式是什么应该很好理解,就是把内存按照分为一页页大小相同的页面,然后再把这些页面分配给进程。因此,在分配给进程时可能会出现这样的情况:
进程需要3MB,分给他4页,每页1MB,这样4>3,就会造成1MB的内部碎片。
而分段式存储管理为什么不会产生内部碎片?
归根结底是由分段本身的定义出发的。如果说分页式是系统对内存的分割,那么分段式就是用户对程序数据的分割。
分页式是没有任何逻辑意义的,而分段式是有其意义在的。
比如说一个程序有主程序段Main类,有通用库,有数据段,这样我们就把这个程序分为三段,分别对应Main,库,数据(说的是最浅显的,详细的可以百度其他),是有逻辑意义的独立单位。都这样分了,怎么还会出现内部碎片?反之,如果是分页式,就可能出现Main类横跨两页,且整个程序装入内存后还有碎片空间的可能了。
总之,引入分段式存储管理本就在一定程度上解决了内部碎片,并且满足了用户的需求。但是分段式存储管理也有不足之处,内存利用率变低了。
因此又引入之后的段页式存储管理方式。