BREW的内存管理文件管理机制.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
BREW 内存管理和文件管理机制 ——培训讲师: 李宜章 概述 头脑风暴之发散讨论: 目的 深入了解BREW的动态应用的内存管理,内存操作上的注意事项 接口的引用计数机制 了解BREW 文件系统目录结构和访问机制 文件管理器接口实例操作 动态应用的内存管理 (1)可以通过MALLOC,REALLOC()来分配内存空间。 (2)通过调用FREE()/Realloc(0)来释放内存。 (3)BREW通过module的上下文来标记分配的内存。 (4)当FREE/REALLOC被调用时,内存被释放,也不再被标记。 (5)当这个module从内存中卸载时,BREW会遍历堆中的被module ID标记的节点,OEMOS_BreakPoint()被调用以报告内存泄漏,然后释放该节点。 (6)内存的生命周期是从MALLOC申请内存空间到FREE/Realloc被调用或者这个模块被卸载。 动态应用的内存管理(续) 1. 动态Applet不能出现全局和静态变量 BREW 结构不支持全局或静态变量,因为动态下载的应用程序,使用全局或静态变量可能导致连接器出现目标错误。 如何保存全局的数据呢?始终将持久数据存储在小程序结构中。 typedef struct _HelloWorldApp { AEEApplet a ; // First element of this structure must be AEEApplet // add your own variables here... //这里添加的变量在整个APP的生存期内,有全局的作用域 int g_AppState; } HelloWorldApp ; 动态应用的内存管理(续) 2. MALLOC的内存一定要释放 3. 通过ISHELL_CreateInstance创建的接口也是需要释放的,使用IBase_Release接口释放,并清空 #define INTFACE_FREE(iptr){ \ if(iptr){IBASE_Release((IBase *)iptr); \ iptr = NULL;} 4. 避免内存越界操作(死机) char str[6]; str[6] = o;//类似代码一定避免 char *pBuff = (char *)MALLOC(5); char str[] = abcdef; STRCPY(pBuff, str); //避免,使用STRNCPY 动态应用的内存管理(续) 5. 避免内存重复释放操作 char *pBuff = (char *)MALLOC(5); char *pb = pBuff; FREE(pBuff); FREE(pb); 6. 内存释放后再次使用 char *pBuff = (char *)MALLOC(5); FREE(pBuff); //pBuff[4] = 0;// FREE后,马上把pBuff清空 pBuff = NULL; (#define FREE_EX(ptr) {if(ptr)FREE(ptr); ptr=NULL;}) 动态应用的内存管理(续) 7.保险阀 1) 执行 NULL 指针检查. MALLOC的内存空间必有有效性检查 BREW接口实例对象必须NULL检查 2) 清除内存 在以下两种情况下需释放内存: 1:必须释放所创建对象的所有实例。 2:应用程序终止时,必须释放所有动态内存(所有已分配内存)。 3:建议在不需要内存时将其释放。 内存泄漏的检查 方法: 应用在调用MALLOC()时,BREW会将调用应用相关联的32位ID与创建的内存节点标记起来。当一个应用退出的时候,BREW会遍历堆,查询是否有与该应用的32位ID标志的泄漏的内存节点,并释放掉。 检查: 在模拟器中,会有错误的运行信息显示,在手机设备上,这个泄漏会悄悄的清除。BREW用于跟踪内存的32位ID是根据module来确定的,因此,同一个module中的两个应用会分配相同的32位ID。 注意: BREW在一个module中的最后一个applet退出的时候才真正开始执行内存泄漏的检测。这种策略的一个副作用是内存泄漏有时候会错误的归到其它应用上。 扩展接口的引用计数机制 文件管理特性 文件管理机制 BREW文件系统的目录结构(AEEFile.h) BREW文件名命名规则 绝对路径:fs:/绝对路径,大小写敏感 相对路径:fs:/~/相对路径,大小写敏感 fs路

文档评论(0)

sdfgrt + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档