衡阳网站设计,小程序推广收费价目表,免费视频剪辑软件,注册微信公众号流程大家好#xff0c;我叫徐锦桐#xff0c;个人博客地址为www.xujintong.com#xff0c;github地址为https://github.com/jintongxu。平时记录一下学习计算机过程中获取的知识#xff0c;还有日常折腾的经验#xff0c;欢迎大家访问。 一、前言
内存碎片是指无法被利用的内… 大家好我叫徐锦桐个人博客地址为www.xujintong.comgithub地址为https://github.com/jintongxu。平时记录一下学习计算机过程中获取的知识还有日常折腾的经验欢迎大家访问。 一、前言
内存碎片是指无法被利用的内存分为外部碎片和内部碎片。分段机制会导致外部碎片分页机制会导致内部碎片。
二、外部碎片
分段机制就是一个进程需要多大的内存空间就给该进程多大的连续物理空间。但是会产生一种情况就是总的空闲内存大小大于进程要申请的空间大小但是因为这些内存是不连续的所以就不能分配个该进程就像下图所示 由图总的空闲物理内存大小为256MB大于新进程申请的内存大小但是因为这两块内存不是连续的所以不能分配给该进程这就是外部碎片。分段是将整个进程内存完整的存到物理内存上由于每个段的长度不固定多个段未必能恰好使用所有的内存空间所以会产生多个不连续的小物理内存导致新的程序无法被装载这时就会出现外部碎片的问题。
在分页机制中不会产生外部碎片分页机制中将物理内存分成一页一页每一页大小都相同且固定的每一页的大小为4KB在Linux中。
系统为了隔离各个进程防止不同进程运行的时候地址覆盖引入虚拟内存的概念。每个都有一个进程空间在进程眼里整个内存都是由自己独享的。操作系统将虚拟地址和物理地址都分成一页一页的然后通过一个元件MMU将虚拟内存的页映射到物理内存的页上。 由图可以看出来在不同进程的虚拟空间中相同的虚拟页映射到了不同的物理页所以不同进程可以实现隔离。可以看到分页将一个进程内存分割成了一页一页的然后再映射到物理内存上。虚拟地址和物理地址的最小分配内存大小都是4KB这样就不会出现总的空闲内存大小够分配但是因为是不连续的所以不能分配内存的这种情况。
简单来说就是分段是直接把进程在物理内存中找个合适的位置塞进去分页是把进程切成一小片一小片的然后再塞进物理内存中。
三、内部碎片
分页会导致内部碎片因为最小的内存分配单位是一页也就是4KB但是如果一个程序申请的内存不到一页系统也得给它分配一页的物理内存这多出来的就是内部碎片。如图所示 图上多出来的这3KB就是内部碎片。
四、解决内部碎片办法
TODO