提高代碼的運行效率(1)

來源:互聯網
上載者:User

【 聲明:著作權,歡迎轉載,請勿用於商業用途。  聯絡信箱:feixiaoxing @163.com】

 

    在下面的blog當中,我將會講解一些提高個人代碼效率的一些手段。這些手段都是被實踐證明,切實可行的。但是不同的處理器和處理平台上面可能會有所差別,但是本質上是一樣的。

 

(1) 用for(; 代替while(1)

(2) 迴圈的時候首先進行內部資料的迴圈,然後進行外部資料的迴圈

(3) 同一層迴圈之內,盡量只安排同一資料的相關操作

(4) 編譯的時候標頭檔不要相互包含,盡量簡單

(5) 盡量不要使用乘除, 多用加減和移位操作

(6) 部分複製、計算操作可以用SIMD命令代替,比如 SSE命令等等

(7) 如果是伺服器軟體或者是遊戲用戶端軟體,請多使用查詢,少計算

(8) if() ...else()的時候,把最長出現的代碼放在前面,不經常出現的結果放在後面

(9) 使用數組的時候,多使用int* p = &value[0]; p ++;迭代的形式, 這樣可以減少資料的計算

(10) 最佳化演算法,發揮當前CPU多核的優勢,最大限速地發揮CPU的特性

 

 

說明:

    以下所有代碼都是VC6.0完成。 

 

詳解:

(1) 為什麼需要用for(; ;)代替while(1)?

 

5: int m = 0;<br />00401038 mov dword ptr [ebp-4],0<br />6:<br />7: while(1)<br />0040103F mov eax,1<br />00401044 test eax,eax<br />00401046 je test+32h (00401052)<br />8: {<br />9: if( m == 0)<br />00401048 cmp dword ptr [ebp-4],0<br />0040104C jne test+30h (00401050)<br />10: break;<br />0040104E jmp test+32h (00401052)<br />11: }<br />00401050 jmp test+1Fh (0040103f)<br />12:<br />13: for(;;)<br />14: {<br />15: if( m == 0)<br />00401052 cmp dword ptr [ebp-4],0<br />00401056 jne test+3Ah (0040105a)<br />16: break;<br />00401058 jmp test+3Ch (0040105c)<br />17: }<br />0040105A jmp test+32h (00401052)<br />  

 

    可以很清楚地看出,while(1)被翻譯成了三個命令,而for(;;)卻沒有。很多同學可能認為,這隻是三條指令而已,沒有什麼大驚小怪的,

但是我們要知道,很多迴圈都是上百萬次的進行的,如果一般的函數都注意這個問題,那麼一天節省下來的CPU時間是相當可觀的。

 

 

(2) 待續

 

 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.