WEB开发网
开发学院手机开发Symbian 开发 Symbian 程序内存管理的特点 阅读

Symbian 程序内存管理的特点

 2010-03-01 16:22:00 来源:WEB开发网   
核心提示:一、特点1、内存少2、Symbian系统长时间运行不关机,即使重启也要保持某些程序的状态,Symbian 程序内存管理的特点,因此Symbian程序绝对不允许内存泄露,二、symbian独特的内存管理机制1、Trap harness (陷阱套)2、cleanup strack (清除栈)3、Two phase cons

一、特点

1、内存少

2、Symbian系统长时间运行不关机,即使重启也要保持某些程序的状态。因此Symbian程序绝对不允许内存泄露。

二、symbian独特的内存管理机制

1、Trap harness (陷阱套)

2、cleanup strack (清除栈)

3、Two phase construction (两阶段构造)

三、Trap harness (陷阱套)

1、异常和TRAP

异常指程序缺少某种资源而发生的错误,异常是不可避免的。

程序发生异常的时候,可以被上层的TRAP捕捉。

void CallFun()

{

TInt err;

//根据返回的err的值可以判断ConstructL是否发生异常。

TRAP(err,ConstructL());

}

void ConstructL()

{

CObject obj = new (ELeave) CObject;

...

}

一个函数命名时带L,说明这个函数有可能发生异常。

2、TRAP 宏,TRAPD宏

TRAP宏和TRAPD宏区别是,TRAPD不需要程序员定义错误参数。

void CallFun()

{

TInt err;

TRAP(err,ConstructL());

}

==

void CallFun()

{

TRAPD(err,ConstructL());

}

TRAP代价很高,因此尽量不要过多嵌套TRAP,函数方法,不要连续使用多个Leave,而是把错误交给调研者。

3、new (ELeave)

new (ELeave) 是对C++的操作符的重载。任何类都可以使用,即当创建类时,如果内存不足失败,则调用User::Leave

CObject *obj = new(ELeave) CObject;

==

CObject *obj = new CObject;

if (!obj)

User::Leave(KErrNoMenory)

;

4、cleanup strack (清除栈)

清除栈是保持分配到堆栈的指针,一单出现异常,系统可以根据清除栈释放程序在堆分配的空间,避免内存泄露。

CClass :: NewL()

{

CClass * self = new(ELeave)CClass();

CleanupStack::PushL(self);

self->ConstructL(); //如果构造失败,则leave

CleanupStack::Pop(self);

return self;

1 2  下一页

Tags:Symbian 程序 内存

编辑录入:coldstar [复制链接] [打 印]
赞助商链接