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

原创 2003年03月03日 09:24:00

今天分析了一个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!

 

编写高质量代码:改善Java程序的151个建议-学习笔记(1-4章)

1.java中通用的方法和准则 2.基本类型 3.类对象及方法 4.字符串 5.数组和集合
  • birdfly12345
  • birdfly12345
  • 2017年05月06日 00:01
  • 2946

编写高质量代码规范

规范1:
  • yuanyuanispeak
  • yuanyuanispeak
  • 2016年01月11日 11:31
  • 940

编写高质量代码:改善JavaScript程序建议--面向对象编程

JavaScript是基于对象的弱类型语言,它是以对象为基础,以函数为模型,以原型为继承机制的开发模式。 建议1:参照Object构造体系分析prototype机制​ 对象(Object)是没有原...
  • ligang2585116
  • ligang2585116
  • 2017年05月22日 19:56
  • 1347

读书笔记之《编写高质量代码:改善C#程序的157个建议》

最近,在阅读书籍《编写高质量代码:改善C#程序的157个建议》,感觉写得很不错,特将其中的建议整理了一下,待以后随时查看。 现只罗列了其中的部分建议,因为书籍还没有阅读完,会慢慢的完善补充。   ...
  • tiana0
  • tiana0
  • 2013年10月05日 10:49
  • 2611

《编写高质量代码:改善Objective-C程序的61个建议》

pdf下载地址: http://download.csdn.net/detail/u013059266/9470077只可惜 网络版本的pdf 只有16个建议,因为前面的是试读,后面的要收费。下次区...
  • u013059266
  • u013059266
  • 2016年03月24日 20:03
  • 566

《编写高质量代码 改善Python程序的91个建议》读后程序学习小结

# coding=utf-8 # Language Reference ''' 参考书:《编写高质量代码 改善Python程序的91个建议》张颖,赖勇浩 著 2014.6 ''' from __fu...
  • BigDeng_2014
  • BigDeng_2014
  • 2017年09月28日 12:38
  • 452

每周一书-编写高质量代码:改善C程序代码的125个建议

C语言因为既具有高级语言特性,又具有汇编语言特性,所以它是近二十几年来使用较为广泛、生命力较强的编程语言。无论是操作系统、嵌入式系统、普通应用软件,还是移动智能设备开发,它都能够很好地胜任,是公认的强...
  • xuanhun
  • xuanhun
  • 2016年08月29日 11:07
  • 1281

编写高质量代码--改善python程序的建议(一)

初衷 python是一个入门十分容易的编程语言,但是想要写好python却是一件不容易的事情,如果不是专业使用python的人,只是将python作为一个脚本语言或者用来处理数据,到了掌握基本的语法之...
  • ZHAICAN
  • ZHAICAN
  • 2016年01月21日 12:05
  • 576

编写高质量代码--改善Java程序的151个建议--读书笔记

--警惕自增陷阱 i++表示先赋值后自增,而++i表示先自增后赋值。下面的代码返回结果为0,因为lastAdd++有返回值,而返回值是自增前的值(在自增前变量的原始值会存在一个内存空间,当自增结束后...
  • u011680118
  • u011680118
  • 2015年08月24日 21:11
  • 616

编写高质量代码——JavaScript篇

一、避免团队合作时的js冲突 使用大写的GLOBAL作为全局变量的变量名。在不同的匿名函数中,根据功能生命一个不同的命名空间,每个匿名函数中GLOBAL对象的属性都不要直接挂在GLOBAL对...
  • echoyoung46
  • echoyoung46
  • 2015年07月07日 22:57
  • 484
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:给Delphi/C++Builder程序员:编写高质量代码的一个小窍门
举报原因:
原因补充:

(最多只允许输入30个字)