Symbian上的可写静态数据(WSD)

WSD(Writable Static Data)--可写静态数据 (translated)
2009-01-07 16:24

 

英文原文链接:http://wiki.forum.nokia.com/index.php/Writeable_static_data

可写静态数据

全局可写静态数据(Global Writeable Static Data,WSD) 就是在整个进程的生命周期内都存在的预处理变量。有时候我们需要WSD定义变量给其他的文件使用。这种情况时常发生在将非Symbian操作系统环境的代码移植到Symbian系统中来的时候。

EKA1上的WSD

在Symbian系统版本6.1, 7.0, 7.0s, 8.0a, 8.1a的内核架构EKA1中,仅仅在EXE类型的程序中支持WSD。我们不能在DLL和APP中使用WSD,如果我们进行了这样的定义,编译器会报告"初始化数据" 错误信息。

在EKA1中,我们如果要使用WSD的话,有下面这些解决办法:

(1), 使用本地线程存储(TLS,Thread Local Storage) 。 在Symbian的FAQ和技术技巧 里面有例子关于怎么用TLS来定义WSD。
(2), 将全局变量变成类成员变量 。这个方法有很大的工作量,尤其是WSD在很多不同地方被使用的情况下。
(3), 使用ECompXL 。尽管ECompXL是被用来压缩Symbian系统的可执行程序文件的,但是他的一个"副作用"可以让开发者把它用来当作WSD使用。

EKA2上的WSD

在Symbian系统版本8.0b, 8.1b及其版本9以后的内核中,EXE和DLL都 支持使用WSD。不过尽管如此,在DLL中使用WSD仍然需要作一些小的修改, 需要在MMP文件中添加如下宏定义:

EPOCALLOWDLLDATA

不过,这是有代价的。当在EKA2上使用WSD的时候需要仔细考虑以下列出的情况:

(1) EKA2的模拟器上仅仅允许有WSD的DLL被一个进程装载 (最 近做的项目中就遇到了这个问题,一个有WSD的DLL被两个exe调用导致这个两个exe不能相互调转切换,提示feature not supported, 呵呵~~)

(2) WSD数据块占用RAM空间

(3) 在ARMv5上块是一种有限的资源

(4) 一个进程中有WSD的DLL的数目是受限的。

参考

Symbian OS support for writeable static data in DLLs (PDF format)

Static data on Symbian OS 9.1 documentation.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值