Linux 内存管理 pt.3
![](/theme/default/default/images/main/eye-open.png)
我们非常重视原创文章,为尊重知识产权并避免潜在的版权问题,我们在此提供文章的摘要供您初步了解。如果您想要查阅更为详尽的内容,访问作者的公众号页面获取完整文章。
![](/theme/default/default/images/main/icon-link.png)
![](/theme/default/default/images/main/icon-jing.png)
Linux 内存管理摘要
在本文中,作者继续探讨了Linux内存管理,重点介绍了内存的分配和回收机制。Linux系统中的页通常为4KB,为了解决页表过大的问题,Linux采用了多级页表和大页技术。
内存分配
Linux中的内存分配主要通过malloc()
函数实现,该函数会根据需要分配的内存大小调用brk()
或mmap()
系统调用。对于4KB到128KB之间的小块内存,使用brk()
分配,其优点是减少缺页异常,提高内存访问效率,但可能导致内存碎片。对于大于128KB的内存,使用mmap()
分配,优点是释放时立即归还系统,但频繁分配会导致大量缺页异常。内存分配实际上在进程首次访问时才完成。
Linux伙伴系统
伙伴系统是一种内存分配算法,它允许快速定位并分配适当大小的内存块。MMU(内存管理单元)协同伙伴系统工作,负责虚拟内存和物理内存的映射。
小于4K内存的分配
对于小于4K的内存分配,Linux系统采用伙伴系统和slab分配器两种方法。伙伴系统将整个物理页分割成小块进行分配,而slab分配器为小内存块创建缓存,并在空间用尽时重新分配物理页。Slab分配器也有助于防止内存碎片。
内存回收
为了防止内存泄漏,应用程序需使用free()
或unmap()
释放内存。系统通过LRU算法回收最少使用的页面,将不常用的内存换出到磁盘,或在内存紧张时通过OOM机制杀死占用大量内存的进程。OOM机制根据进程的oom_score
评分决定杀死对象。
作者结束文章时鼓励读者支持其创作工作。
想要了解更多内容?
![](/theme/default/default/images/main/icon-link.png)
![](/theme/default/default/images/main/icon-jing.png)
![](https://cdn.easycorp.cn/rongpm/upload/202312/f_39217d624bb2b42ce8f6322ebd7e573a.png)
![](https://cdn.easycorp.cn/rongpm/upload/202312/f_39217d624bb2b42ce8f6322ebd7e573a.png)