国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C++ > 正文

給Delphi/C++Builder程序員:編寫高質(zhì)量代碼的一個小竅門

2019-11-18 18:37:31
字體:
供稿:網(wǎng)友
 

今天分析了一個C++Bulider (Delphi)程序的匯編代碼,發(fā)現(xiàn)了提高代碼效率的一個小竅門,希望能給C++Builder和Delphi程序員做代碼優(yōu)化的時候提供一點參考。

匯編代碼是這樣的:
一開始判斷一個文本框的輸入字符是否為空,匯編代碼里面有:
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   //調(diào)用GetDlgItemText
00456DBC  |. 8B45 E4        MOV EAX,DWORD PTR SS:[EBP-1C]
00456DBF  |. E8 08CDFAFF    CALL Crackme1.00403ACC  //調(diào)用strlen函數(shù)
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
                          ~~~~~//這里,我們發(fā)現(xiàn)又調(diào)用了一次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  //調(diào)用strcat函數(shù)

翻譯成C++Builder代碼(Delphi)應(yīng)該是:
if(strlen(Edit1->Text) > 0 )
{
   strText = Edit1->Text + "ABCDEF" ;
}
如此分析,那么我們每次用到Edit1->Text都要調(diào)用一次GetDlgItemText,
這樣就影響了效率了。

重寫這段代碼我們可以寫成:
str1 = Edit1-Text;
if(strlen(str1)> 0 )
{
   str1 = str1 + "ABCDEF"
}
這樣就少了一次GetDlgItemText,的調(diào)用,我們知道,每次多CALL一個函數(shù),就要消耗很大開銷,比如現(xiàn)場保存,堆棧操作,以及函數(shù)內(nèi)部的代碼開銷。

相信在Delphi(C++Builder)代碼中,存在大量類似的Edit1->Text操作,這些多余開銷累積起來就相當(dāng)可觀了,所以我們在編碼過程中稍微改變一下風(fēng)格,就可以大大提高效率,何樂而不為呢~~   ^_^

Good Luck!


上一篇:C++Builder/Delphi中透明Panel及透明窗口的實現(xiàn)方法

下一篇:泛型編程在非C++語言中的實現(xiàn)之探討

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
學(xué)習(xí)交流
熱門圖片

新聞熱點

疑難解答

圖片精選

網(wǎng)友關(guān)注

主站蜘蛛池模板: 揭阳市| 怀来县| 深泽县| 开封市| 温宿县| 桑植县| 正定县| 泰兴市| 宝鸡市| 靖远县| 房山区| 新野县| 达孜县| 佛坪县| 玉门市| 舒城县| 宝鸡市| 霍州市| 台前县| 望城县| 鄂温| 宁晋县| 将乐县| 尼勒克县| 金坛市| 上蔡县| 彝良县| 阳城县| 香河县| 安国市| 洪江市| 临西县| 唐河县| 凌海市| 江川县| 巴彦淖尔市| 原平市| 河东区| 同江市| 镶黄旗| 拉孜县|