目录
1 最初还不是tlsf
早几年(2019年之前)idf使用的堆管理器实现很简单,使用一个链表将所有(空闲和非空闲)的内存块串起来。对此,已经有同学分析过,可以参考这篇博客:esp32 heap 内存管理简析。下面这张图也是来自这篇博客,一目了然:
2 为什么要引入tlsf
旧的堆管理器的实现比较简单,性能一般,无论是申请还是释放都需要遍历整个堆,时间复杂度是O(N)
,这对于RTOS是难以接受的。对此,有很多改进的方向:
- free list
- separate fit
- two level separate fit
可以认为上述三种堆管理器的实现是层层改进的。free list
只会将空闲的内存块串起来,减少了申请和释放时需要遍历的链表长度。separa