转载自 https://www.douban.com/group/topic/47566535/?refer=related
内核的genalloc是给一些需要自己维护内存分配的内核模块使用的,如SRAM, TCM, Shared-memory等。它提供了最先适配 fist-fit和最佳匹配 best-fit两种分配算法。
first-fit 和 best-fit
这两种都是通过Bitmap来标记内存中每个分配单元的状态,空闲或已分配。 最先分配是将第一个可容纳请求大小的的连续空闲空间分配出去。 最佳分配是将可容纳请求大小的的最小连续空闲空间分配出去。 假设某片内存被划分为10个最小单 元,这两种分配方法演示如下:
Operation First-fit Best-fit
Initial state ➀➁➂➃➄➅➆➇➈➉ ➀➁➂➃➄➅➆➇➈➉
A: alloc(4) ➊➋➌➍➄➅➆➇➈➉ ➊➋➌➍➄➅➆➇➈➉
B: alloc(1) ➊➋➌➍➎➅➆➇➈➉ ➊➋➌➍➎➅➆➇➈➉
C: alloc(2) ➊➋➌➍➎➏➐➇➈➉ ➊➋➌➍➎➏➐➇➈➉
D: free(A) ➀➁➂➃➎➏➐➇➈➉ ➀➁➂➃➎➏➐➇➈➉
E: alloc(2) ➊➋➂➃➎➏➐➇➈➉ ➀➁➂➃➎➏➐➑➒➉
F: alloc(4) failed ➊➋➌➍➎➏➐➑➒➉
可以看出,这两种方法都会容易产生内存碎片,但Best-fit比First-fit要好一些,当然 这是以牺牲分配速度为代价的。