您的位置:首页 > 其它

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

2009-07-14 11:06 344 查看
*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";
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: