注:本文的大部分内容摘录自论文《TLSF: a New Dynamic Memory Allocator for Real-Time Systems》,可以通过“科学上网”访问如下链接阅读原文:http://www.gii.upv.es/tlsf/files/ecrts04_tlsf.pdf。
什么是TLSF
TLSF是Two Level Segregated Fit memory allocator的缩写,是一种动态内存分配算法。名称中有两个关键词,Segregated Fit和Two Level。
首先我们来了解什么是Segregated Fit。在内存分配算法中,空闲内存块的管理是算法的核心。根据寻找空闲内存块的策略,可以将内存分配算法分为以下几种:
- Sequential Fit:将所有的空闲内存块,放入到一个单向/双向链表中。这是最基础的管理策略。算法非常简单,但寻找空闲内存块的效率依赖于链表的大小。
- Segregated Fit:将所有的空闲块,放入到一组链表中,每一个链表中只包含某一个大小范围的空闲块。例如最典型的dlmalloc算法。
- Buddy System: Segregate Fit算法的变种,具有更好的切割和合并效率,又很多变种,如Binary Buddies,Fibonacci Buddies, Weighted Buddies等。通常这类算法的内部碎片化问题比较严重。
- Indexed Fit:通过一些高阶的数据结构来索引(Index)空闲的内存块。例如基于平衡树的“Best Fit”算法。
- Bitmap Fit: Indexed Fit算法的变种,通过一小段内存的位图来标记对应的内存是空闲的还是使用中。
所以TLSF是一种通过一组链表来管理不同大小内存块的内存分配算法。
为什么称为Two Level?
基本的Segregated Fit算法是使用一组链表,每个链表只包含特定长度范围来的空闲块的方式来管理空闲块的,这样链表数组的长度可能会很大。如下图,TLSF为了简化查找定位过程,使用了两层链表。第一层,将