1. 程式人生 > >《程式設計珠璣》之程式碼調優

《程式設計珠璣》之程式碼調優

chapter 9 書中的觀點:

@1,有些程式設計師太在乎程式的細小“優化”,以至於難以維護;而另外一些程式設計師很少關注效率,雖然他們編寫的程式有著漂亮清晰的結構,但是效率極低以至沒有實際用處。優秀的程式設計師將效率納入整體的考慮之中:效率只是軟體中的問題之一,但有時候也很重要。

@2,快取記憶體原理,什麼場景適合使用來提高效率。

@3,能不優化就不要優化。結合工作經驗,很大一部分bug,事故,都是改動引發的。不成熟的優化是大量程式設計災害的根源,它會危機程式的正確性,功能性,以及可維護性。

附加二分搜尋的優化原始碼:

/* 改進後的二分搜尋,若搜尋的物件有多個,返回最左邊的那個值的位置 */ int binarySearch2(int arr[],int n,int value) {     /*         這裡的思路是,假想的下標 -1 的值表示最小值,下標 n 的值表示最大值。         初始階條件 b = -1,e = n;並且有 n >= 0, arr[-1] < value, arr[n] >= value         終止條件是 b + 1 = e         搜尋條件:b < e, arr[b] < value && arr[e] >= value         說明:當條件終止時,b + 1 = e,而arr[b]<value, arr[e]>=value。所以e是最終可能的結果。     */     assert(n >= 0)     int b = -1;     int e = n;     while((b+1) != e)     {         /*conditon: arr[b]<t, arr[e]>=t, b<e*/         int m = b + (e-b)/2;         printf("b:%d, m:%d, e:%d\n",b,m,e);         assert(b < e && m > b && m < e);         if(arr[m]<t)             b = m;         else             e = m;     }     /*final: arr[b]<t, arr[e]>=t*/     int p = u;     if(p >= n || arr[p] != value)         return -1;     return p; }