频道直达 - 专题 - 新闻 - 技巧 - 组网 - 开发 - 安全 - web编程 - 图像 - 操作系统 - 数据库 - 教育 - 旅游 - 健康 - 时尚 - 驱动 - 软件 - 游戏 - 多媒体 - ERP - 讨论组

给Delphi/C++Builder程序员:编写高质量代码的一个小窍门

来源: 作者: 出处:巧巧读书 2007-10-09 进入讨论组
 

今天分析了一个C++Bulider (Delphi)程序的汇编代码,发现了提高代码效率的一个小窍门,希望能给C++Builder和Delphi程序员做代码优化的时候提供一点参考。

汇编代码是这样的:
一开始判断一个文本框的输入字符是否为空,汇编代码里面有:
00456DAB  |. 8D55 E4        LEA EDX,DWORD PTR SS:[EBP-1C]
00456DAE  |. 8B45 FC        MOV EAX,DWORD PTR SS:[EBP-4]
00456DB1  |. 8B80 CC020000  MOV EAX,DWORD PTR DS:[EAX+2CC]
00456DB7  |. E8 90CAFCFF    CALL Crackme1.0042384C   //调用GetDlgItemText
00456DBC  |. 8B45 E4        MOV EAX,DWORD PTR SS:[EBP-1C]
00456DBF  |. E8 08CDFAFF    CALL Crackme1.00403ACC  //调用strlen函数
00456DC4  |. 85C0           TEST EAX,EAX
00456DC6  |. 0F8E F7010000  JLE Crackme1.00456FC3

接下来,将它与另外一个字符串相连
00456DCF  |. 8B45 FC        MOV EAX,DWORD PTR SS:[EBP-4]
00456DD2  |. 8B80 CC020000  MOV EAX,DWORD PTR DS:[EAX+2CC]
00456DD8  |. E8 6FCAFCFF    CALL Crackme1.0042384C
                          ~~~~~//这里,我们发现又调用了一次GetDlgItemText
00456DDD  |. 8B55 E4        MOV EDX,DWORD PTR SS:[EBP-1C]
00456DE0  |. 8D45 EC        LEA EAX,DWORD PTR SS:[EBP-14]
00456DE3  |. B9 68704500    MOV ECX,Crackme1.00457068
00456DE8  |. E8 2BCDFAFF    CALL Crackme1.00403B18  //调用strcat函数

翻译成C++Builder代码(Delphi)应该是:
if(strlen(Edit1->Text) > 0 )
{
   strText = Edit1->Text + "ABCDEF" ;
}
如此分析,那么我们每次用到Edit1->Text都要调用一次GetDlgItemText,
这样就影响了效率了。

重写这段代码我们可以写成:
str1 = Edit1-Text;
if(strlen(str1)> 0 )
{
   str1 = str1 + "ABCDEF"
}
这样就少了一次GetDlgItemText,的调用,我们知道,每次多CALL一个函数,就要消耗很大开销,比如现场保存,堆栈操作,以及函数内部的代码开销。

相信在Delphi(C++Builder)代码中,存在大量类似的Edit1->Text操作,这些多余开销累积起来就相当可观了,所以我们在编码过程中稍微改变一下风格,就可以大大提高效率,何乐而不为呢~~   ^_^

Good Luck!

来自:http://www.qqread.com/bcb/c343135.html 更多文章 更多内容请看C/C++技术专题C/C++进阶技术文档专题,或进入讨论组讨论。
收藏此文】【 】【打印】【关闭
较早的文章:C++ builder 的文件读写操作总结

较新的文章:致Delphi和C++Builder社群的一封公开信
相关图文阅读
频道图文推荐
健 康 咨 询
时 尚 咨 询
巧巧读书宗旨
相关专题
讨论组问题推荐
站内各频道最新更新文档
站内最新制作专题
热门关键字导读
Photoshop教 程照片处理 照片制作 PS快捷键 抠图
计 算 机 故 障XP系统修复
艺 术 与 设 计设计 流媒体 设计欣赏 边框
计 算 机 安 全ARP
站内频道文章精选
巧巧电脑频道编辑信箱  告诉我们您想看的专题或文章