关于COSMOS动态内存使用的疑问

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/ch_xin/article/details/8363937

新增一系列画面,调试过程中发现经常在BACK时Modis就没有反应了,如果是在手机上操作应该是会重启的现象。
经过检查代码和多次试验,似乎找到一点规律——在退出画面时没有释放全部动态内存就会出现上述重启现象。

以下是一些关于COSMOS动态内存使用的疑问:
1、COSMOS中常用的动态申请内存方式有哪几种?
据我观察所得经验:VFX_OBJ_CREATE动态申请的内存,通常不需要特别关注释放的时间点,当其parent析构时会释放;VFX_ALLOC_NEW与VFX_DELETE配对使用,画面使用了VFX_ALLOC_NEW,但没有在退出前VFX_DELETE就会重启。
2、各种方式有哪些适用环境或限制?
3、使用new,delete创建非VfxObject对象是否有限制?
4、如果要创建某个对象,并希望此对象的生命期与具体画面的生命周期脱离关系,要怎么做?有哪些需要注意?

回答:

这种现象属于一种形式的 memory leak,cosmos FW 进行 memory leak 的点是在 app 退出的时候,检查在该app 运行期间是不是所有的ASM memory都释放了。如果有memory leak 则会 assert....

以下是一些关于COSMOS动态内存使用的疑问:
1、COSMOS中常用的动态申请内存方式有哪几种?
据我观察所得经验:VFX_OBJ_CREATE动态申请的内存,通常不需要特别关注释放的时间点,当其parent析构时会释放;VFX_ALLOC_NEW与VFX_DELETE配对使用,画面使用了VFX_ALLOC_NEW,但没有在退出前VFX_DELETE就会重启。
答:
1)从ASM(Application Share Memory) 申请memory
a. VFX_OBJ_CREATE 这个宏可以动态创建继承自VfxObject的实例..生命周期与其parent 相同,会随其parent自动销毁,或者可以提前呼叫VFX_OBJ_CLOSE(xxx)去释放...
b. VFX_ALLOC_NEW, 这个宏用来创建 不是继承自VfxObject的实例,因为创建时没有设定parent,所以不会自动销毁,需要在app 退出前手动 呼叫VFX_DELETE去销毁,否则会产生memory leak,app退出时会assert。
c. VFX_ALLOC_MEM, 这个宏用来创建buffer, 因为创建时也没有设定parent,所以也需要在退出前手动呼叫VFX_FREE_MEM去释放memory,原因同 b.
以上 宏 都有_EX版本,如:VFX_OBJ_CREATE_EX 用法大致相同,
2) 从Global memory 申请,VFX_SYS_ALLOC_MEM(), 这也需要手动VFX_SYS_FREE_MEM释放,同时不强制 必要在app 退出前释放,即不释放也不会assert...
注: 这种方式在6250上面应该被禁止了,因为global memory配置得比较小,通常只有100k左右,所以禁止app使用。
3)从plateform申请memory,
#include "vapp_platform_context.h"
VFX_OBJ_CREATE(ptr, __className, VFX_OBJ_GET_INSTANCE(VappPlatformContext));
这种方式也不建议使用。偷用别人的memory,用多了应该会影响其他模块的正常使用,需要手动呼叫VFX_OBJ_CLOSE去释放,因为它的parent永远都不会释放,所以就没人帮我们释放这块memory了。

2、各种方式有哪些适用环境或限制?
答:ASM必须用在APP内部,app启动前或退出后就无法使用了, 并且推荐大家尽量使用这种方式。除非有特殊的需求ASM无法满足,才考虑用其他的方式。

3、使用new,delete创建非VfxObject对象是否有限制?
答: 禁止直接使用 new 来create 实例, 请使用VFX_ALLOC_NEW。

4、如果要创建某个对象,并希望此对象的生命期与具体画面的生命周期脱离关系,要怎么做?有哪些需要注意?
答: 抱歉,不太了解你的“与具体画面的生命周期脱离关系”是什么意思。 对象的生命期,与其parent 相同。您可以在创建对象时,为它选择适当的parent 来改变它的生命周期。如果ASM不能满足您的需求,则可以考虑 全局静态数组...通常各个service都无法使用ASM,他们只能使用全局静态buffer,

猜你喜欢

转载自blog.csdn.net/ch_xin/article/details/8363937
今日推荐