Symbian 中程序和线程对内存的占用
2010-06-22 02:57:00 来源:WEB开发网1.用客户端-服务端的架构
2.用TLS(Thread Local Storage 本地线程存储)
给WSD用TLS:
每个DLL将会有TLS (Thread Local Storage本地线程存储)基于每个线程每个DLL.
在DLL里的全部的共用或静态数据可以被组合为一个结构,当线程创建以后这个特殊的结构将在heap里被创建。线程的TLS将被赋值为这个结构的指针。因为这个DLL::settls() 应用程序编程接口以被使用,为了 存取/修改任何共用数据,我们需要以下步局:
用DLL::TLS() 得到结构的指针
用指针定位实际的数据
线程被破坏的时候被TLS指向的结构可能被删除而且TLS可能被调零。
每个用这个技术DLL的将有一个函数.这个函数将照顾到创建包括所有在heap的共用数据和安装DLL的TLS的结构。这个代码可能和以下的这个差不多:
[Copy to clipboard]CODE:
void InitLibrary()
{
//allocate the structure containing global data on heap
GlobalData* p = new GlobalData();
if ( p )
{
Dll::SetTls( p ); //Set this Dll's Tls with this structure
pointer
}
else
//Panic the thread
}
复制代码
这样的DLL可能多带一个照顾空闲空间的函数。当需要使用这个DLL的时候,线程将调用这个函数。这个函数的功能看起来是这样的:
[Copy to clipboard]CODE:
void CleanupLibrary()
{
//Get the Dll's Tls
GlobalData* p = (GlobalData*) Dll::Tls();
if ( p )
{
//Do some global variable specific cleanup activity if
required
Cleanup( p );
delete p; //Deallocate the memory now
}
}
复制代码
特别的是别的被导出的API的DLL将得到DLL的TLS,而且可以用共用变数。这个大部分的时候象这样被独立:
更多精彩
赞助商链接