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

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

 

1、算法優化算法

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

 

2、循環和判斷步驟優化函數

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

 

  一、減小循環體內運算量:優化

 

  (a)查表:提早列表,循環內查表。編碼

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

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

 

  二、判斷式合理排列conditions減小判斷次數:htm

 

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

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

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

 

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

 

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

 

3、數據結構的設計優化

 

  一、使用盡可能小的數據結構。如char好於int好於float。

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

  三、數據合理佈局

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

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

  四、變量名短好於長。

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

 

4、數據操做優化

  一、使用指針。

  二、儘可能使用常量。

  三、經常使用變量設置爲寄存器變量。

  四、初始化好於賦值。

  五、減小文件讀取操做。

 

5、運算優化

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

  一、使用位運算。

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

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

 

6、C語言函數優化

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

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

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

  四、本地函數聲明爲靜態。

 

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

相關文章
相關標籤/搜索