文章管理 优雅的slab内存分配器(六)—— freelist

本文详细介绍了Linux slab内存分配器中的freelist,它用于记录未使用的object索引。freelist是一个数组,当分配或释放object时,其状态会相应更新。通过示例展示了freelist在初始化、分配和释放过程中的变化,帮助理解其工作原理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

freelist是干嘛的?


我们前面提到过freelist,只不过仅仅提到了freelist可以放在slab内部也可以放在slab外部,并没有提到freelist的具体作用。我们今天就来剖析一下freelist的作用。

freelist的作用其实非常非常简单,就是记录slab中没有使用的object。这里有几个注意点:

  1. freelist实际上是一个数组,数组中存放未使用的object的index值。
  2. page->active用于记录哪些object index是空闲的,freelist索引0-page->active记录内容无效,索引page->active往后是空闲的object index。
  3. 上面提到的已分配并不一定是被用户使用,也可能是被cache到了array_cache中。

    下面我们采用图形辅以代码来详细说明freelist的工作机制。

Freelist功能剖析


freelist初始化

cache_grow_begin--->cache_init_objs(cachep, page)--->set_free_obj(page, i, i);

当分配slab的时候,slab中所有所有的object都是空闲的,此时freelist数组中存放的值是0,1,2,3 ……,如下图:
这里写图片描述

pa

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值