Symbian 内存管理

系统内存有内存管理单元(MMU)管理。Symbian主要分为以下几类:

1.       MMC: 可读/写存储介质,用于用户数据,程序代码。

2.       ROM: 只读存储器,用于操作系统代码,系统所需数据。

3.       RAM: 主内存,用于处理栈,处理堆,存储全局变量,作为操作系统栈造作系统堆。

 

1.       内存分配方式:

1)       从静态存储区域分配。内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。例如全局变量,static变量。

2)       在栈上创建。在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限。缺省大小是 8Kb

3)       从堆上分配,亦称动态内存分配。程序在运行的时候用mallocnew申请任意多少的内存,程序员自己负责在何时用freedelete释放内存。动态内存的生存期由我们决定,使用非常灵活,但问题也最多。

4)       内存泄漏是由于资源使用完后,没有释放或释放不成功造成的。

 

2.       Leave

1)       Leave 是一种异常处理机制。

2)       Symbian OS 引入了Leave的概念,替代C++中的异常处理。若内存空间或资源得不到成功分配,那么就会产生Leave.如果Leave在某个函数中发生了,那么它也将在所有调用该函数的函数中发生,直到有相关的函数处理这个Leave.如果应用程序中没有函数来处理这个Leave,那么系统就会执行一些默认的处理操作。

3)       Leave TRAPSymbian 中的异常处理机制。

4)       如果一个函数可能发生Leave,那么就需要在函数名字后面加上后追“L”,在调用函数时很容易知道那些函数可能发生Leave

5)       TRAPTRAPD用于处理Leave

 

3.       清理栈

1)       清理栈是Symbian OS提出的处理内存泄漏的方法。

2)       基本原理:保存那些在发生Leave时需要释放的局部变量,这样如果函数发生Leave,那么清理栈里的所有对象都会被自动删除。

3)       入栈:Cleanup stack::PushL(ptr)—用于指针入栈,若发生Leave,ptr指向的内存会被删除。
CleanuoClosePushL(handle)
—用于句柄,若发生Leave,句柄会自动关闭。

4)       出栈:CleanupStack::Pop(pointer)
CleanupStack::PopAndDestroy(pointer)

5)       如果一个函数在退出时,需要将对象放置在清理栈中,那么函数的名字后面应加上后追“LC 

 

4.       二阶段构造

1)       二阶段构造函数提出的目的是为了解决构造函数资源分配问题。

2)       基本思想:将不会发生异常的代码放在普通的构造函数中;把可能发生异常(进行动态内存资源分配)的部分放在二阶段构造函数中。

3)       建议:所有自定义的C类都应该定义NewL()和NewLC()函数,并且都是公有静态函数;同时定义私有的二阶段构造函数和C++构造函数。

4)       构造方面:

Ø         普通构造函数不能包含能发生Leave的代码;

Ø         可能发生Leave的代码放在二阶段构造函数中;

Ø         成员变量的初始化可以有两个构造函数的任何一个来完成;

Ø         若基类有二阶构造函数ConstructL(),那么在派生类的构造函数ConstructL()中必须调用它,并且通常在最开始的时候进行;

5)       析构方面:

Ø         删除空指针没有什么影响;

Ø         删除对象后,应将其指针设为空;

Ø         在删除对象,并将其指针设为空后,再进行内存分配;

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值