Rosalloc就是google版本的Dlmalloc,负责连续地址的分配。
分配策略和dlmalloc类似,也是分箱制,至于传言中的比dlmalloc效率高支持多核我是没看出来。
不过代码倒是比dlmalloc写的较人能看懂了点。
--------------------------------------
免责声明: |
以下内容仅供参考 |
--------------------------------------
Rosalloc将内存空间分为34个箱子等级,0~31号箱子大小为16*(箱号+1),32号箱子为1K,33号箱子为2K。
小箱子的集合就叫做Run,Run可以有多个箱子,并在头部保存了自身的状态,如bitmap来标记分配出去的内存,当前是几号箱的集合等。
Run的内存分布大概是这样的:
----Run
-------Head
-------箱子0
-------箱子1
------ 。。。。。
Rosalloc对每个Run的实际内存大小也是有限制的,0~7号箱子为1个page,8~15为4个page,17~31为8个page,32为16page,33为32个page,所以,实际每个Run能够拥有的箱子数量也是给定的,为Run的拥有的page大小-头部大小 /每个箱子所需要的内存 并向下取整。
所以,其实可以看到,Run的本质就是N个page,对page的具象化。
那么如何分配内存?<