最简单的slob实现

最简单的slob实现为什么需要 slob 在内核空间 每次分配页面 伙伴系统 只能分配 4K 的倍数的大小 如果需要分配字节为单位的内存 则需要 slob 机制 在 slob 机制中 是在伙伴系统的基础上分配内存 然后对内存块进行细分 slob 机制设计思路 1 并没有按照对象的大小来分配一个特定的 slabcache 任何 size 的 slab 对象都可以拥挤到一个 page 里 即一个 page 里可以同时存在不同大小的对象 2 没有 pre cpu 的缓存和多核 share 缓存的思想 3 需要分配对象时 就从一个有空闲空间的

为什么需要slob?

在内核空间,每次分配页面(伙伴系统)只能分配4K的倍数的大小,如果需要分配字节为单位的内存,则需要slob机制。

在slob机制中,是在伙伴系统的基础上分配内存,然后对内存块进行细分。

slob机制设计思路

1. 并没有按照对象的大小来分配一个特定的slab cache任何size的slab对象都可以 拥挤到一个page里,即一个page里可以同时存在不同大小的对象。

2. 没有pre-cpu的缓存和多核share缓存的思想。

3. 需要分配对象时,就从一个有空闲空间的page里查找有没有合适的空间来存储。

4. 把一个page分成一个个小格子单元,一个小格子单元占用2个字节。

5. struct page里有两个成员配合slob分配器,一个是freelist指向当前空闲空间的地址,一个是slob_left_units表示剩余多少个小格子。空闲空间的第一个小格子用来存储 对象的大小size,第二小格子用来指向下一个空闲空间的起始地址next

图解实例

下图展示了连续分配从一个page里面分配2K内存和1K内存的方法:

最简单的slob实现

释放内存

slob释放内存思路还是比较简单。

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/215618.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月18日 下午1:50
下一篇 2026年3月18日 下午1:50


相关推荐

  • 前端加速必备之BootCDN

    前端加速必备之BootCDNhttps www bootcdn cn

    2026年3月17日
    2
  • 腾讯重构混元大模型研发体系:成立大语言和多模态模型部,提升AI长期技术作战能力

    腾讯重构混元大模型研发体系:成立大语言和多模态模型部,提升AI长期技术作战能力

    2026年3月12日
    2
  • String转换Long两种方式

    Long.ValueOf(“String”)与Long.parseLong(“String”)的区别Long.ValueOf(“String”)返回Long包装类型Long.parseLong(“String”)返回long基本数据类型

    2022年4月5日
    78
  • ansys随机振动分析_workbench扫频振动仿真

    ansys随机振动分析_workbench扫频振动仿真随机振动(PSD)分析步骤PSD分析包括如下六个步骤:1.建造模型;2.求得模态解;3.扩展模态;4.获得谱解;5.合并模态;6.观察结果。以上六步中,前两步跟单点响应谱分析一样,后四步将在下面作详细讲解。Ansys/Professional产品中不能进展随机振动分析。如果选用GUI交互方法进展分析,模态分析选择对话框〔MODOPT命令〕中包含有是否进展模态扩展选项〔MXPAND命令〕,将其设置为YES就可以进展下面的:扩展模态。这样,第二步〔求得模态解〕和第三步〔扩展模态〕就合并到一个步

    2022年10月10日
    4
  • simhash的应用范围_Simplorer

    simhash的应用范围_Simplorer目录0x01海量数据文本相似度解决方式SimHash+分词方法+基于内容推荐算法0x02海量simhash查询(1)抽屉原理(2)建立索引(3)判重(4)优化效果(5)权衡时间、空间(6)存储选型0x03比较相似度0x01海量数据文本相似度解决方式SimHash+分词方法+基于内容推荐算法原文链接:海量数据文本相似度解决方式SimHash+…

    2022年10月1日
    9
  • 每天学一点 — CCriticalSection临界区

    每天学一点 — CCriticalSection临界区(转)类CCriticalSection的对象表示一个“临界区”,它是一个用于同步的对象,同一时刻只允许一个线程存取资源或代码区。临界区在控制一次只有一个线程修改数据或其它的控制资源时非常有用。例如,在链表中增加一个结点就只允许一次一个线程进行。通过使用CCriticalSection对象来控制链表,就可以达到这个目的。它就像是一把钥匙,哪个线程获得了它就获得了运行线程的权力,而把其他线程统统阻塞

    2022年7月20日
    15

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号