相比于伙伴算法,slab 更适用于小块内存分配,可以更高效地使用内存。在 slab 分配器中,内存被划分成一个个固定大小的块,每个块被称为一个“SLAB”。
当申请内存时,slab 分配器会从对应大小的 SLAB 中分配一个空闲块并返回其地址,当释放内存时,slab 分配器会将该块标记为空闲状态以便下一次分配使用。
Slab是一种内核中常用的内存管理机制,它将连续的物理内存划分为一个个大小相同的内存块,然后按照一定的策略将它们放入到不同的slab中。每个slab包含若干个相同大小的内存块,这些内存块可以被分配或者释放给内核应用程序来使用。
kmalloc依赖于slab,它通过在不同的slab中分配和释放内存,来实现对内存的动态管理。kmalloc会在内核启动时,预先分配一定数量和大小的内存块,并将这些内存块分配到不同的slab中。当内核应用程序需要内存时,kmalloc会从相应的slab中分配一个空闲内存块,并返回对应的指针;当内核应用程序释放内存时,kmalloc会将这个内存块标记为可用,然后放回到相应的slab中,以便下次使用。
由于kmalloc是基于slab设计的,因此它具有一些优势,例如可以提高内存使用效率、加速内存分配和释放过程等。
但同时也存在一些缺点,例如可能会浪费内存空间、可能存在内存碎片问题等。因此,在实际应用中,需要根据具体的场景和需求,选择合适的内存分配器和算法来进行内存管理。
【最后一个bug】多平台都有更新和发布,大家可以一键三连,关注+星标,不错过精彩内容~
上一篇:【6.数据流中的第 K 大元素】
下一篇:Vue中组件到底是什么