OSAL内存分配管理机制解读

OSAL内存管理机制比较节省内存,仅占用2字节,如下图所示。它的局限性在于:因为记录内存块长度的len仅为15比特,所以最大长度为2^15-1=32767字节。

 OSAL内存分配管理机制解读_设计制作_测量仪表

设有如下配置:MAXMEMHEAP=1024  SMALLBLK_BUCKET=128

BIGBLK_SZ=1024-128-2*2=892。调用osal_mem_init()之后堆栈的数据结构如下图所示:

 OSAL内存分配管理机制解读_设计制作_测量仪表

随着用户调用osalInitTasks()初始化各任务后,堆栈会分配一些long lived alloca     ti   on内存。之后,再调用osal_mem_kick(),此时系统会将ff1指针调整为“小块内存分配区”中第一个可用的内存,这样做可以提高内存分配时的查找效率。效果如下图所示:

动态分配内存函数osal_mem_alloc(size)先检查size大小,如果是小块内存将从ff1开始查找;否则,从BIGBLK_IDX处开始查找。

查找原理如下图所示:

 OSAL内存分配管理机制解读_设计制作_测量仪表

(1)   hdr所指内存块已经被占用,继续查找下一块;

(2)   hdr所指内存块空闲但该块内存小于size,使用prev记录该内存指针;

(3)   需要将prev和hdr所指2块内存进行合并操作;

(4)   合并之后内存块满足size大小,执行分配;否则继续查找下一块,直到分配成功,或查找到堆栈的底部而失败返回。

 OSAL内存分配管理机制解读_设计制作_测量仪表

如果hdr指向的空闲内存比所需size大过阀值则进行内存分割,如下图所示。首先将hdr所指内存分割成size和     te   mp两块,然后设置size块内存已占用标志,最后返回ptr给用户。

 OSAL内存分配管理机制解读_设计制作_测量仪表

内存的回收原理见下图,根据用户提交的ptr指针计算hdr指针(后退一个内存管理结构尺寸的偏移),然后将占用标志清除即可。

 OSAL内存分配管理机制解读_设计制作_测量仪表

16
8
0
70

相关资讯

  1. 1、《黄金兄弟》是男人的爱情片,大鹏助阵郑伊健陈小春共唱友情岁月3974
  2. 2、香港票房#《冰海陷落》逆袭登顶,《波西米亚狂想曲》开画获季军4517
  3. 3、电影《我不是药神》带来的启示:最可怕的疾病其实是没钱4693
  4. 4、《护花危情》:为黄宗泽“花痴”一回4889
  5. 5、凌晨“被直播”长达两小时,张艺兴却毫不知情,工作人员遭怒斥3678
  6. 6、金庸IP《飞狐外传》热拍中,张子豪饰演少年胡斐,你期待吗?4841
  7. 7、《隋唐英雄4》将播霸王花孙耀琦开启传奇爱情979
  8. 8、焦俊艳加盟《笔仙3》粉丝齐呼超期待4566
  9. 9、哈文再执掌春晚八九不离十已和部分演员在接触4124
  10. 10、《香蜜沉沉》网络播放时间调整,追剧的小伙伴再也不用熬夜了5031
全部评论(0)
我也有话说
0
收藏
点赞
顶部