内存分配器slab

来源:互联网 发布:公交导航软件 编辑:程序博客网 时间:2024/04/28 14:24

slab是Linux操作系统的一种内存分配机制,而slab分配器是基于对象进行管理的,相同类型的对象归为一类(如进程描述符就是一类),每当要申请这样一个对象,slab分配器就从一个slab列表中分配一个这样大小的单元出去,而当要释放时,将其重新保存在该列表中,而不是直接返回给伙伴系统,从而避免这些内碎片。

 

Linux 的slab 可有三种状态:

  • 满的:slab 中的所有对象被标记为使用。
  • 空的:slab 中的所有对象被标记为空闲。
  • 部分:slab 中的对象有的被标记为使用,有的被标记为空闲。

slab 分配器首先从部分空闲的slab 进行分配。如没有,则从空的slab 进行分配。如没有,则从物理连续页上分配新的slab,并把它赋给一个cache ,然后再从新slab 分配空间。[

 

与传统的内存管理模式相比, slab缓存分配器提供了很多优点。

1、内核通常依赖于对小对象的分配,它们会在系统生命周期内进行无数次分配。

2、slab 缓存分配器通过对类似大小的对象进行缓存而提供这种功能,从而避免了常见的碎片问题。

3、slab 分配器还支持通用对象的初始化,从而避免了为同一目的而对一个对象重复进行初始化。

4、slab 分配器还可以支持硬件缓存对齐和着色,这允许不同缓存中的对象占用相同的缓存行,从而提高缓存的利用率并获得更好的性能。
 
 
0 0
原创粉丝点击