本文分享自中移OneOS公众号《内存管理》。
根据应用程序需求和系统资源的差异,操作系统提供了不同的内存分配管理算法,分别是小内存管理算法、slab管理算法和memheap管理算法。
小内存管理算法主要针对系统RAM空间比较少的情况,一般用于小于2MB内存空间的系统,也是使用最广泛的内存管理算法。
slab内存管理算法则主要是在系统RAM空间比较丰富的情况,提供了一种近似内存池分配的快速算法。
memheap算法则用于系统存在多个内存堆的情况,它可以将多个内存连接在一起,形成一个大的内存堆,应用程序使用时感知不到多个内存堆的存在。
这几类内存堆管理算法在系统运行时只能选择其中之一或者完全不使用,他们提供给应用程序的API接口完全相同。
小内存管理算法
在小内存管理算法中,使用内存块的形式管理。
每个内存块都包含一个数据头,通过数据头把内存块用双向链表的方式连接起来,不论使用块或者空闲块都在同一个链表中管理。内存块的数据头数据结构定义如下:
struct os_heap_mem
{
os_uint16_t magic; /*魔数*/
os_uint16_t used; /*使用标识*/
os_size_t prev; /*指向前控制块的指针*/
os_size_t next; /*指向后控制块的指针*/
};
其中,next和prev用于双向链表的连接,