MTK 内存管理简单总结 2
2013-03-11 22:03
211 查看
在 MTK 内存管理简单总结 中,大体说了MTK的三种内存分配方式,对于第三种,也就是app buffer,是比较丰富的一种。在 MTK 平台中也有许多具体的实现。在代码里搜索一下 kal_adm_create 就可以发现有许多地方使用了。看一个比较典型的使用:在文件app_mem.c里,有两个memory pool,一个是用于应用之间共享内存,另一个是用于屏幕内存。第一种内存,主要是用于各种应用之间共享内存(以下简称ASM),这样可以节省内存,MTK实现了一种机制,可以在多个应用之间共享内存当当前应用想获得的共享内存不足时,MTK会通知后台应用释放相应的内存。这套机制在AppMemMgr.c里面实现。先看一下初始化该内存次池函数void applib_mem_ap_init(void (*stop_finish_callback_by_MMI)(kal_uint32 app_id, kal_uint32 string_id, kal_bool result))这个函数带有一个参数,这个参数是一个函数指针,该回调函数有3个参数,app_id,(应用id),string_id 和 result。这个回调函数比较特别,是当一个后台应用 被 要求释放内存,释放完毕后调用的。为什么要搞这么一个函数,因为一些应用比较复杂,释放内存的同时需要关闭一些资源,而这些动作是异步的,等这些异步发的操作多完成时,调用一些函数,告诉ASM,内存释放完毕。 具体实现:通过 调用 kal_adm_create 来创建一个内存池,然后保存了一些回调函数,没有什么特别的地方,内存池的大小 是 APPLIB_MEM_AP_POOL_SIZE 来确定的,可以通过修改 app_asm_pool_union 来修改内存池的大小。 应用分配内存void *applib_mem_ap_alloc(kal_uint32 app_id, kal_uint32 mem_size)应用通过上面的函数来获得ASM的内存,参数一 app_id,是当前分配内存的id,这个id需要自己定义,并且注册(下文说明),参数二是实际需要分配的内存大小。具体实现:先mem_size 进行了处理,让其四字节对齐。然后通过 kal_adm_alloc 获得内存,不过这个内存加上了一个头结构和尾结构,(头和尾都加入了特殊字符,再释放时进行检查,这个可以判断内存是否越界)。然后把这个内存插入到list的头部。转自:http://blog.csdn.net/yanwuxufeng/archive/2010/07/13/5733138.aspx
相关文章推荐
- MTK 内存管理简单总结
- MTK 内存管理简单总结
- MTK 内存管理简单总结 4
- MTK 内存管理简单总结
- MTK 内存管理简单总结
- MTK 内存管理简单总结 4
- MTK 内存管理简单总结
- MTK 内存管理简单总结 5
- MTK 内存管理简单总结 3
- MTK 内存管理简单总结1
- MTK 内存管理简单总结 3
- MTK 内存管理简单总结 2
- python 内存管理简单总结
- iOS 非ARC基本内存管理系列总结6 -设计微博模型
- MTK 内存管理
- C++中类的内存分配简单总结
- Linux学习总结—启动、内存结构和管理
- IOS 内存管理机制总结
- 通过一个小例子来简单理解C语言中的内存空间管理
- java虚拟机内存管理机制(一):JVM内存管理总结