没有合适的资源?快使用搜索试试~ 我知道了~
Symbian OS内存管理介绍.txt
需积分: 3 28 下载量 81 浏览量
2008-12-27
13:56:06
上传
评论
收藏 7KB TXT 举报
温馨提示
试读
3页
Symbian OS内存管理介绍.txt Symbian OS内存管理介绍.txt Symbian OS内存管理介绍.txt Symbian OS内存管理介绍.txt
资源推荐
资源详情
资源评论
Symbian OS内存管理介绍
在Symbain OS中内存管理的主要任务是:如何为程序分配内存以及如何在程序的内部分配内存。
Symbian OS 程序最根本和基础的东西就是内存,作为一个有限的资源,必须小心细致地处理,特别是当有错误或异常发生的时候。正是由于这样的原因,在支持清理机制的API中,异常处理和内存管理几乎是绑在一起的。
Uikon核心框架使用这些支持清理机制的API来管理内存,使GUI程序的基础架构具有良好的性能和表现。GUI程序还支持异常情况下内存清理,以及调试模式下的内存泄露检测。
一、Symbian OS的清理机制(cleanup)
清理机制是Symbain OS 程序对于程序异常处理的一种特有方式。当异常发生时,清理机制将清理错误的内存区域。Symbian OS的清理策略和它所有类的基类CBase类有着密切关系。要了解Symbian OS清理机制就必须清楚以下三个概念:异常处理(exception handling)、清理栈(cleanup stack)以及通用清理项(general cleanup item)。
1、异常处理 (Exception Handling)
Symbian OS没有使用C++的try…catch异常处理方式,而是使用了它自己所特有的方式:leave。在Symbian OS中,异常以 leave 的形式出现,trap harness可以在程序中设置一个点,使程序发生leave时回跳到这个点上,宏TRAP和TRAPD 可以在程序中设置这个点。调用系统API User 类的一些静态函数可以触发Leave ,例如 User::Leave()方法,这就相当于主动地抛出异常,当然某些系统函数或是用户代码,也有可能发生leave。
2、清理栈(Cleanup Stack)
当 leave 发生时,任何分配了资源的heap内存,例如通过new()方法创建的对象,他们将被孤立,因为leave一旦发生已指向他们的指针就不存在了,这样就导致了内存泄漏。为了防止内存泄漏发生,程序就有要记录那些已经被创建的对象,如果程序运行发生leave,那么系统可以自动找到并清理他们所占用的内存。这些工作可以通过清理栈来完成。CleanupStack类是支持清理栈的一个类。GUI应用程序拥有一个由应用程序框架所提供的清理栈,其他的应用程序必须用CTrapCleanup 类自己构建一个清理栈。
3、通用清理项(General Cleanup Item)
在默认情况下,清理栈只处理那些 CBase-based 类(也就是它所处理的类必须是由 CBase类继承下来的)和那些untyped 类型对象(用一个简单的内存释放语句就可以释放的对象)。通用清理项(General Cleanup Item)使其他类型的对象也可以放到清理栈中。TCleanupItem类是支持通用清理项的一个类。
二、Symbian OS的内存分配
内存分配管理的目的在于 能够使Symbian OS 进程通过底层函数访问和操纵内存区域。绝大多数的客户端程序不需要直接使用这些函数,那些在进程间共享内存区域以及在一个进程的线程间共享内存区域的程序会使用这些底层函数来管理内存。这里有两个概念需要了解 chunk(块) 和 heap(堆)。
1、Chunk(块)
chunk 是一组线性相邻的内存地址在RAM 中的映射。进程创建以后,它的地址空间包括1到3个chunk:
(1)stack/heap chunk:这里包括了进程的主线程所要使用的stack 和 heap。所以这个chunk 通常是进程所必须的。
(2)code chunk:这个chunk 只有当进程被加载到RAM时才出现。
(3)data chunk:只有当进程拥有静态数据的时候才会有这个chunk。
当然,程序可以还创建额外的chunk。 一个全局的chunk可以被其他进程访问,这样就实现了大量内存的共享。RChunk 类提供了对chunk的支持。TFindChunk 类可以用来查找其他进程创建的全局chunk。
2、Heap(堆)
heap 通常用于显式的动态内存分配 。Symbian OS定义了C++中new操作符创建对象到当前线程的heap中。Heap的功能可以是:
?监控内存泄漏:对于一个GUI程序来说,这个是经常发生的。
在Symbain OS中内存管理的主要任务是:如何为程序分配内存以及如何在程序的内部分配内存。
Symbian OS 程序最根本和基础的东西就是内存,作为一个有限的资源,必须小心细致地处理,特别是当有错误或异常发生的时候。正是由于这样的原因,在支持清理机制的API中,异常处理和内存管理几乎是绑在一起的。
Uikon核心框架使用这些支持清理机制的API来管理内存,使GUI程序的基础架构具有良好的性能和表现。GUI程序还支持异常情况下内存清理,以及调试模式下的内存泄露检测。
一、Symbian OS的清理机制(cleanup)
清理机制是Symbain OS 程序对于程序异常处理的一种特有方式。当异常发生时,清理机制将清理错误的内存区域。Symbian OS的清理策略和它所有类的基类CBase类有着密切关系。要了解Symbian OS清理机制就必须清楚以下三个概念:异常处理(exception handling)、清理栈(cleanup stack)以及通用清理项(general cleanup item)。
1、异常处理 (Exception Handling)
Symbian OS没有使用C++的try…catch异常处理方式,而是使用了它自己所特有的方式:leave。在Symbian OS中,异常以 leave 的形式出现,trap harness可以在程序中设置一个点,使程序发生leave时回跳到这个点上,宏TRAP和TRAPD 可以在程序中设置这个点。调用系统API User 类的一些静态函数可以触发Leave ,例如 User::Leave()方法,这就相当于主动地抛出异常,当然某些系统函数或是用户代码,也有可能发生leave。
2、清理栈(Cleanup Stack)
当 leave 发生时,任何分配了资源的heap内存,例如通过new()方法创建的对象,他们将被孤立,因为leave一旦发生已指向他们的指针就不存在了,这样就导致了内存泄漏。为了防止内存泄漏发生,程序就有要记录那些已经被创建的对象,如果程序运行发生leave,那么系统可以自动找到并清理他们所占用的内存。这些工作可以通过清理栈来完成。CleanupStack类是支持清理栈的一个类。GUI应用程序拥有一个由应用程序框架所提供的清理栈,其他的应用程序必须用CTrapCleanup 类自己构建一个清理栈。
3、通用清理项(General Cleanup Item)
在默认情况下,清理栈只处理那些 CBase-based 类(也就是它所处理的类必须是由 CBase类继承下来的)和那些untyped 类型对象(用一个简单的内存释放语句就可以释放的对象)。通用清理项(General Cleanup Item)使其他类型的对象也可以放到清理栈中。TCleanupItem类是支持通用清理项的一个类。
二、Symbian OS的内存分配
内存分配管理的目的在于 能够使Symbian OS 进程通过底层函数访问和操纵内存区域。绝大多数的客户端程序不需要直接使用这些函数,那些在进程间共享内存区域以及在一个进程的线程间共享内存区域的程序会使用这些底层函数来管理内存。这里有两个概念需要了解 chunk(块) 和 heap(堆)。
1、Chunk(块)
chunk 是一组线性相邻的内存地址在RAM 中的映射。进程创建以后,它的地址空间包括1到3个chunk:
(1)stack/heap chunk:这里包括了进程的主线程所要使用的stack 和 heap。所以这个chunk 通常是进程所必须的。
(2)code chunk:这个chunk 只有当进程被加载到RAM时才出现。
(3)data chunk:只有当进程拥有静态数据的时候才会有这个chunk。
当然,程序可以还创建额外的chunk。 一个全局的chunk可以被其他进程访问,这样就实现了大量内存的共享。RChunk 类提供了对chunk的支持。TFindChunk 类可以用来查找其他进程创建的全局chunk。
2、Heap(堆)
heap 通常用于显式的动态内存分配 。Symbian OS定义了C++中new操作符创建对象到当前线程的heap中。Heap的功能可以是:
?监控内存泄漏:对于一个GUI程序来说,这个是经常发生的。
资源评论
shenjigong19801109
- 粉丝: 6
- 资源: 76
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功