Symbian操作系统结构之二:可写静态数据

*Symbian操作系统支持EXE中的全局可写静态数据


*在采用EKA1的Symbian操作系统(8.1a,8.0a以及以前版本)中,可写静态数据不能用于DLL中
 - DLL具有单独的区域用于存放程序代码和只读数据,没有用于可写数据的区域


*采用EKA2的Symbian操作系统支持在DLL中使用可写静态数据,但是并不是推荐这样做
 - 内存使用开销巨大
 - Symbian操作系统模拟器支持性不佳

 

*替代可写静态数据的方法
 - 线程本地存储(简称TLS)
  ·在Symbian8.1b之前使用DLL类,在Symbian8.1b和9.0使用UserSvr类
  ·线程本地存储是一个32位指针,用来引用模拟全局可写静态数据对象
  ·所有的全局数据组成一个对象,在线程创建时在堆一分配
 - 客户端-服务器框架
  ·Symbian操作系统支持在EXE中使用可写静态变量,因此可以在服务器端(本身就是EXE)实现可写静态数据
 - 在类中嵌入全局变量
  ·可以将全局变量放在类中,将类作为参数在对象和函数间传递
  
*可写静态数据定义
 - 全局可写静态数据是每个进程都可以修改的变量,它在进程的生命周期内存在
 - 唯一可以在DLL中使用的全局数据是内置类型,或没有构造函数的类的全局常量,比如
  static const TUid KUidFooDll = {oxF000C001};
  static const TInt KMinimumPasswordLength = 6;
 - 以下的定义不可用,因为它们要求实时地构造对象
  static const TPoint KGlobalStartingPoint(100,100);
  static const TChar KExclamation('!');
  static const TPtrC KDefaultInput = _L("");
 - 不能使用非常量的全局数据,比如
  static const TText* ptr = (const TText*)"data";
 - 应该修改为
  static const TText* const ptr = (const TText*)"data";

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值