这篇链接说的很好:
https://blog.csdn.net/lukuen/article/details/6935068
简单来说:
一开始伙伴算法申请一块内存块slab分成多个对象,放在营业厅kmem_cache_cpu里面
用光了再伙伴申请,上面的slab放到仓库kmem_cache_node里面
如果有空的slab则释放这个slab
《Linux内核设计与实现》的作者Robert Love提到任何情况下都应该使用SLUB,除非是嵌入式平台,并且应当在评估完性能之后再考虑使用SLUB还是SLOB,因为SLOB代码量少,效率没那两个高,一般嵌入式可以用这个。
SLAB最近已经没有更新了,SLUB才是大势所趋,他对SLAB做了一些优化。