内存管理器分为动态内存堆管理和静态内存池管理。

内存堆管理算法:

小内存管理算法:包含一个12字节的数据头。

RTT之内存管理器

slab算法:多内存池管理快速算法,系统资源比较丰富

memheap:多内存堆的管理算法。多个地址不连续的内存堆。

使用内存前,需要系统初始化时堆初始化rt_system_heap_init():

内存堆管理:

分配:从系统堆空间找到合适大小的内存块,把内存块可用地址返回给用户。

释放:如字意。

重分配内存块:在保持原内存块数据不变(缩小时,后面的数据会截断)。

分配多内存块:分配连续内存地址的多个内存块。

设置内存钩子函数:内存分配完成后进行回调。

释放内存钩子函数:释放完回调。

 

内存池分配:用于分配大量大小相同的小内存块,尽可能避免内存碎片化。

工作机制:通过内存池控制块来实现。

内存池创建时,先向系统申请一大块内存,然后分成同样大小的多个小内存块,链起来(空闲链表),每次分配时,从链头取一个给申请者。

RTT之内存管理器

内存池管理:

创建:创建一个内存池对象,并从堆上分配一个内存池。与里面内存块大小,数目匹配。

删除:先唤醒等待在该内存池对象上的所有线程,然后再释放内存池数据存放区域,然后删除内存池对象。

静态:

初始化:由用户指定空间,用户把缓冲区指针传递给内存池控制块。

将内存池对象传给内核,以及内存池用到的内存空间,管理的数据块数目和块大小,指定一个名称,然后初始化。

脱离:先唤醒所有等待在该内存池对象上的线程,然后从内核对象管理器中脱离。

分配:从指定的内存池中分配一个内存块,可设置超时间。

释放:通过释放的内存块计算出内存池对象,增加内存池对象可用内存块数目,把被释放的内存块加入到空闲内存块链表上。

 

 

 

相关文章: