MTK 内存管理简单总结1

MTK 手机用的操作系统是 nucleus, 这是一个rtfs(实时操作系统),这个rtfs本身是不带内存管理功能,所以MTK自己写的内存管理。

(nucleus在系统初始化完毕时,会调用Application_Initialize,参数就是可使用内存的起始地址)

大体上来分,MTK内存可以分为3种:

  • control buffer

平常使用的OslMalloc就是这个内存。

这个内存内部实现是按块来划分的(pool),具体的配置可以custom_config.c 文件里的custom_config_ctrl_buff_info()里看到

里面的size 指定了这个块的大小,no_of_buff 指定了有多少个这样的块。

按块来管理内存,可以有效地控制内存的碎片,管理也相对简单,可能会造成内存的一些浪费

对于手机这种需要长时间运行不重起的设备来说,还是很有必要的。

MTK 默认最大块的大小为 2048byte,也就是2k。这就是说用OslMalloc 分配内存默认最大能分配到2k,

这个可以看custom_config_ctrl_buff_info()配置可以看到。

可以通过修改里面的配置来改变这个值,不过一般不这么做,因为MTK提供了其他的内存管理方式

  • system buffer

system buffer 平时我们用不到,听名字也是系统使用的。

主要是提供 run-time usage,是一块 semi-static memory(什么意思?)

     比如 block of task, task stack ,control block of control buffer ,buffer pool等等

     在 custom_config.c里面配置 ,主要有两个宏 GLOBAL_MEM_SIZE  和 GLOBAL_DEBUG_MEM_SIZE
     两个 static 数组 static kal_uint32 System_Mem_Pool[GLOBAL_MEM_SIZE/sizeof(kal_uint32)];  
     和                     static kal_uint32 Debug_Mem_Pool[GLOBAL_DEBUG_MEM_SIZE/sizeof(kal_uint32)];

     为了满足时间要求,也就是要求快速分配,系统内存又分为 internal system memory 和 system memory
     前者link 到 internal SRAM ,后者link 到 external SRAM

  • app buffer

app的内存是使用通过MTK 提供的一种ADM(application dynamic memory)机制来实现,ADM 主要的功能是通过管理一个数组来实现内存的分配。

ADM 也是通过内存块(pool)来实现的,具体无法看到其代码。app通过这个adm这个机制,可以更加灵活的使用内存,比如分配大内存(大于2k)等等

主要函数


创建 adm
KAL_ADM_ID kal_adm_create(void *mem_addr, kal_uint32 size, kal_uint32 *subpool_size, kal_bool islogging);

删除函数
kal_status kal_adm_delete(KAL_ADM_ID adm_id);

分配函数 
extern void *kal_adm_internal_alloc(KAL_ADM_ID adm_id, kal_uint32 size, char *filename, kal_uint32 line);
#define kal_adm_alloc(adm_id, size) kal_adm_internal_alloc(adm_id, size, __FILE__, __LINE__)

释放函数
extern void kal_adm_free(KAL_ADM_ID adm_id, void *mem_addr);

转自:http://blog.csdn.net/yanwuxufeng/archive/2010/07/12/5730092.aspx

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值