c程序代碼優化的一些方法


  我認為一個好的用於科學計算的程序代碼應該:算法漂亮精妙,程序簡潔易懂,運算快速,節省內存。這里有的地方是矛盾的,比如簡潔vs易懂,時間vs空間,找個平衡吧。目前來看時間要比空間寶貴一些。寫程序分幾步:選擇最妙的算法;規划最優的流程;規划數據結構、函數;編碼實現。

 

一、算法優化

  好的方法、算法是程序優化的根本,選擇最好的算法永遠是王道。

 

二、循環和判斷步驟優化

  規划流程時幾個不依賴於編譯器的tips:

 

  1、減少循環體內運算量:

 

  (a)查表:提前列表,循環內查表。

  (b)提取循環的公共子式到循環外計算。

  (c)將循環體展開以減少循環的判斷過程。

 

  2、判斷式合理排列conditions減少判斷次數:

 

  (a)根據發生頻率排列switch語句的case,或者if語句的條件式。

  (b)將一些低概率條件合並及嵌套判斷。

  (c)將多重條件嵌套判斷。

 

3、合理組織循環和判斷的嵌套

 

(a)將值不變的條件式放在循環的外面。

 

三、數據結構的設計優化

 

  1、使用盡量小的數據結構。如char好於int好於float。

  2、使用便於運算的數據結構。

  3、數據合理布局

    (a)結構體數據成員按類型長度排序。

    (b)把結構體填充成最長類型長度的整數倍。

  4、變量名短好於長。

  5、同時聲明變量好於分別聲明變量

 

四、數據操作優化

  1、使用指針。

  2、盡量使用常量。

  3、常用變量設置為寄存器變量。

  4、初始化好於賦值。

  5、減少文件讀取操作。

 

五、運算優化

  C語言數據運算強度的優化,即使用快的運算代替慢的運算。

  1、使用位運算。

  2、用a*a代替pow(a,2.0)。

  3、減少整數除法,如用i/(j*k)代替i/j/k。

 

六、C語言函數優化

  1、函數用inline代替外部調用(但會增加程序長度)。

  2、定義函數原型,便於編譯器優化。

  3、不定義不使用的返回值。

  4、本地函數聲明為靜態。

 

參考:http://blog.sciencenet.cn/blog-1005104-727037.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM