RK3399平台开发系列讲解(内存篇)18.5为什么需要Slab

Posted 内核笔记

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了RK3399平台开发系列讲解(内存篇)18.5为什么需要Slab相关的知识,希望对你有一定的参考价值。

为什么需要Slab

在这里插入图片描述

平台 内核版本 安卓版本
RK3399 Linux4.4 android7.1

内存碎片问题

首先内核会频繁的分配和释放内存,由于每次分配和释放的数据结构不同,所以不可避免的产生内存碎片,也就是内存中存在很多无法使用的小内存段,这时候如果去申请一段比较大的连续内存,即使系统显示可用内存够用也会导致内存分配失败。

数据缓存

为了提高模块的性能,很多程序员会新建很多空闲链表,也就是说提前在系统中建好特定数据结构的链表,当需要使用内存的时候直接去填充空闲链表即可,直接填充数据要比申请内存、分配内存、填充内存性能要好的多。但是这样使用内存会带来一个问题:Linux内核有很多模块,如果每个模块、驱动为了提高性能都去新建一个空闲链表,这时候系统内存很快就会耗尽。另外,这些链表并不是全局的,系统想要释放内存的时候

以上是关于RK3399平台开发系列讲解(内存篇)18.5为什么需要Slab的主要内容,如果未能解决你的问题,请参考以下文章

RK3399平台开发系列讲解(内存篇)15.33为什么可用内存会远超物理内存?

RK3399平台开发系列讲解(内存篇)深刻理解虚拟内存

RK3399平台开发系列讲解(内存篇)深刻理解虚拟内存

RK3399平台开发系列讲解(内存篇)常见内存性能问题梳理

RK3399平台开发系列讲解(内存篇)Linux缓存系统

RK3399平台开发系列讲解(内存篇)15.29物理内存管理