Symbian Tips

本文分享了Symbian OS C++手机开发的一些关键技巧,包括合理分配栈和堆内存、处理定时中断、控制.exe文件栈大小、理解和应用Symbian OS DLL特性等。这些经验对于开发者避免常见问题非常有用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Symbian Tip

推荐:huwell     发表日期:2004年12月16日    阅读次数:499


以下内容摘自《Symbian OS C++手机开发》一书,里面内容很好,值得时常翻看:)

一)启动线程后,线程的栈不能增加。如果栈溢出,则线程会崩溃掉。通常初始栈大小为12Kb。在每个函数中,栈用于C++自动变量。因此,必须避免超大规模的自动变量使用,而要将所有大的变量都放在堆上。
(***这条很重要,我已经在编程时碰到几次,别人也时常会碰到这个问题,例如你在一个函数中出现了自定义字符串数组就很容易溢出,再者,你使用一个函数读入文件的内容,那也容易溢出,大的数据都要放在堆上,不能做为自定义变量出现***)

二)Symbian内核支持ARM上64Hz的定时中断以及基于PC仿真器上10Hz的定时中断。这也就是游戏中在真机上最多可以达到64fps,而模拟器上只有10fps的道理。呵呵,当然我们可以通过运算来消除两种之间的差异,使之看起来一样:)

三)小的对象可以放到栈上,如整数或矩形:
TInt x;
TRect region;

但是,大部分对象,尤其是大对象, 则应该放在堆上做:
CEikDialog* dialog = new CGameSettingsDialog;

注意,类名以C开头的对象仅能放在堆上。不过,类名以T开头的对象要注意一下,除非很小,否则不要放在栈上,尤其要小心TFileName:
TFileName fileName;
在Symbian中,文件名可以为256个字符(512字节),因为它使用的是unicode。在12kb的栈上是不可能存放如此多的字符的。

四)可以控制.exe上栈的大小。这适用于控制台程序、服务器或无GUI的程序。但不适用于UIQ程序,因为它们是通过apprun.exe启动的。但从程序内部显式启动线程时,还可以控制栈的大小。如果应用程序中有一个大的算法要处理。那我们有必要将它封装在一个单独的.exe中进行处理,并适当提高其栈大小。

五)Symbian OS DLL不支持可写静态数据。它支持只读数据和程序代码,而静态可写数据紧由.exe支持。
而这个在移植中就会碰到大问题,因为通常别的平台上是允许本地有静态可写数据的。所以我们一般用.exe包含移植代码,这样的话就可以获得分离的好处,并且可被多个程序所共享。因为这个是Symbian OS服务器:)
当然你可以使用TLS线程本地存储,使用时我们要考虑的是它对性能的消耗,因为获得TLS指针涉及到系统调用。此调用要使用20条左右的指令,而不是通常获得普通指针所需要的单条指令。

 
转载自:http://huwell.51.net/article/read.php?articleid=281&PHPSESSID=PHPSESSID
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值