WSD in Symbian OS

WSD, Writable Static Data, 可写静态数据。大家在windows编程中可能常用到,在DLL中使用一些全局静态数据,以便在其他DLL或其他进程中共享访问。但是在Symbian中,因为内存开销太高,WSD是不推荐使用的。注意这种限制只存在于DLL中,如果你编写的是EXE是不会受到影响的。

全局WSD顾名思义是全局性的,包括在函数外面定义的变量,结构或类,以及一些函数内的静态数据。

TBufC<20> buf; //WSD 
void SetBuf()
 {
 static Tint iLength; //WSD ...
 }

注意WSD的声明一般不带const,不过看看下面的声明,

const TInt i=…; //OK – truly const
const TPtrC KPtrValue=...; //NOT OK – non trivial constructor 
const TRgb KCol=...; //NOT OK – non trivial constructor

可见对一些内置类型,如TInt,使用const声明表示是真正的常量。但是如果是自定义类型,该对象尽管是不可改变,但编译器仍使用了一个变量来存储它。所以它仍然是WSD。

Symbian OS对WSD的支持

Symbian OS所有版本都支持EXE的全局WSD。

EKA2(8.1b之后)支持DLL的WSD,之前的版本不支持。

和其他资源一样,在程序里定义了WSD对象,就需要注意在程序退出时清除,以防资源的泄漏。

WSD对象的清除请注意下面两点:

1. 在EXE进程中定义的或者是其静态加载的DLL中定义的WSD需要清除,因为进程退出时Symbian OS不会自动调用这些WSD的析构函数

2. EXE进程使用RLibrary动态调用的DLL定义的WSD,不需要清除,因为进程退出时Symbian OS会自动调用它们的析构函数。

posted on 2010-05-08 17:15  魏方  阅读(300)  评论(0编辑  收藏  举报

导航