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)机制来
MTK 内存管理简单总结
最新推荐文章于 2022-11-04 16:22:46 发布
MTK手机操作系统Nucleus不自带内存管理,采用自定义内存管理。内存分为Control Buffer(日常使用,按块管理,防止碎片),System Buffer(系统运行时使用,快速分配)和Application Buffer(通过ADM机制,灵活分配大内存)。ADM管理的内存通过kal_adm_create等函数操作,如在app_mem.c中用于应用间共享内存和屏幕内存。
摘要由CSDN通过智能技术生成