| 3 | |
| 2007.11 |
最近在优化一个函数的栈使用中,意外的发现以前一直被忽略的一个消耗源,那就是TRAP()宏。作为Symbian编程基石之一的TRAP/Leave在已经被很多人当作C++的try{throw}catch一样使用的时候,你是否意识到这个宏会消耗多达76字节的栈空间?如果使用的是TRAPD()版本,则这个数字将达到80字节。倘若函数中用了不止一次的话,栈消耗将相当可观。
除了认真审视函数上下文中是否有使用TRAP()的必要(有些时候直接往上传递Leave也未尝不可), 可能更多的时候是难以避免使用TRAP()的,那么如何才能尽量节省栈空间呢?这里有一个简单的方法,那就是把TRAP()宏拆开来,在一个函数内使用共享的TTrap对象。
如果你也被Symbian那点可怜的栈空间困扰,不妨也关注一下程序中TRAP()/TRAPD()的使用吧。
| 15 | |
| 2007.5 |
PC-Lint是一款强大的C/C++程序检查工具,毫不夸张地说,如果编译器能为你发现20%的程序缺陷,那么PC-Lint至少还能为你发现余下的65%。(最后15%还是留给你自己去排查吧,机器始终是无法取代人脑的~)
可是,当PC-Lint遇上Symbian,就像那法力无边的如来佛遇上了刁钻难缠的孙悟空,也常常拿它没有办法。如今咱可是和谐社会了,怎么说也不能一怒之下就将孙猴儿打下五指山,落的个百年不得翻身吧。为了让两位大爷和平共处,我这观世音也只好费力的来调解调解了。
首先,在下面的地址取得Symbian官方提供的Lint配置文件:
http://www.symbian.com/developer/techlib/v9.2docs/doc_source/faqsdk/faq_0449.html
(如果官方的链接无法下载,请[点击这里]下载其副本)
借助官方的配置文件,PC-Lint已经能够识别大部分的Symbian程序代码。但实践中遇到的一些Lint提示仍然是这份97年之后再也没更新过的配置文件所能应付的。在这里,我补充一些自己总结的额外规则,提供给大家参考:
-D_UNICODE
-e1774 // Disable dynamic_cast
-emacro(717, *) // Ignore do{...} while(0) in macros
-emacro(???, _LIT)
-emacro(???, _L)
-function( exit, User::Leave, User::LeaveNoMemory )
-function( __assert, User::LeaveIfError )
至于TRAP/TRAPD所产生的“Warning 655”,始终未能找到有效的消除方法。(当然,最坏的情况下你也可以加上括号以迁就PC-Lint的智商……)

