會員控制臺 會員登入 會員註冊 最後更新 進階搜尋 會員投稿 登出
香港IT網為您提供最新最全面的IT技術資訊,是您學電腦的好地方。 設為首頁
收藏本站
留言給我
  IT首頁 | 作業系統 | 軟體教學 | 硬體頻道 | 網絡頻道 | 防黑技術 | 網頁設計 | 程式設計 | 圖形圖像 | 數碼&遊戲
| 加解密技術 | IT論壇
當前線上:25 人
作業系統
軟體教學
硬體頻道
網絡頻道
防黑技術
網頁設計
程式設計
圖形圖像
數碼&遊戲
加解密技術
香港IT網 / 程式設計 / VC/VC.net / C++ 代碼優化
C++ 代碼優化
2008-04-02          點選: 447
[1]

  談到優化,很多人都會直接想到彙編。難道優化只能在彙編層次嗎?當然不是,C++層次一樣可以作代碼優化,其中有些常常是意想不到的。在C++層次進行優化,比在彙編層次優化具有更好的移植性,應該是優化中的首選做法。 

 

  確定浮點型變數和運算式是 float  

 

  為了讓編譯器產生更好的代碼(比如說產生3DNow! SSE指令的代碼),必須確定浮點型變數和運算式是 float 型的。要特別注意的是,以 "F"; 或 "f"; 為尾碼(比如:3.14f)的浮點常量才是 float 型,否則預設是 double 型。為了避免 float 型參數自動轉化為 double,請在函數聲明時使用 float 

 

  使用32位的資料類型 

 

  編譯器有很多種,但它們都包含的典型的32位類型是:intsignedsigned intunsignedunsigned intlongsigned longlong intsigned long intunsigned longunsigned long int。儘量使用32位的資料類型,因為它們比16位元的資料甚至8位元的資料更有效率。 

 

  明智使用有符號整型變數 

 

  在很多情況下,你需要考慮整型變數是有符號還是無符號類型的。比如,保存一個人的體重資料時不可能出現負數,所以不需要使用有符號類型。但是,如果是要保存溫度資料,就必須使用到有符號的變數。 

 

  在許多地方,考慮是否使用有符號的變數是必要的。在一些情況下,有符號的運算比較快;但在一些情況下卻相反。 

 

  比如:整型到浮點轉化時,使用大於16位元的有符號整型比較快。因為x86構架中提供了從有符號整型轉化到浮點型的指令,但沒有提供從無符號整型轉化到浮點的指令。看看編譯器產生的彙編代碼: 

 

  不好的代碼: 

 

編譯前 編譯後 

 

double x mov [foo + 4], 0 

unsigned int i mov eax, i 

x = i mov [foo], eax 

flid qword ptr [foo] 

fstp qword ptr [x]  

 

  上面的代碼比較慢。不僅因為指令數目比較多,而且由於指令不能配對造成的FLID指令被延遲執行。最好用以下代碼代替: 

推薦的代碼: 

 

編譯前 編譯後 

 

double x fild dword ptr [i] 

int i fstp qword ptr [x] 

x = i  

 

  在整數運算中計算商和餘數時,使用無符號類型比較快。以下這段典型的代碼是編譯器產生的32位整型數除以4的代碼: 

 

  不好的代碼 推薦的代碼 

 

編譯前 編譯後 

 

int i mov eax, i 

i = i / 4 cdq 

and edx, 3 

add eax, edx 

sar eax, 2 

mov i, eax  

責任編輯: 風隨行
[2] »
發表評論 查看評論 加入收藏 Email給朋友 列印本文
如果你想對該文章評分, 請先登陸, 如果你仍未注冊,請點擊注冊鏈接注冊成為本站會員.
平均得分 0, 共 0 人評分
1 2 3 4 5 6 7 8 9 10
最新評論 (共有 1 條評論) 發表時間 作者 回复
哇!好用! 2008-05-12 09:55 am alex07055 0
更多評論...

Copyright © 2004-2007 香港IT網 All rights reserved. 站長:風隨行
本站所刊登的各種新聞資料和各種專題專欄資料大部分為網上收集
如果你認為侵犯了你的版權,請通知我們,我們馬上刪除。 Email:info@hkitn.com