CSSAPP稀里糊塗的讀書筆記(五)優化程式效能

2021-08-29 23:07:44 字數 732 閱讀 8534

本章主要**如何使用幾種不同型別的程式優化技術,使程式執行的更快。

編寫高效程式需要做到以下幾點:第一,我們必須選擇一組適當的演算法和資料結構。第二,我們必須編寫出編譯器能夠有效優化以轉換成高效可執行**的源**。第三,針對處理運算量特別大的計算,將乙個任務分成多個部分,這些部分可以在多核和多處理器的某種組合上並行地計算。

程式優化地第一步就是消除不必要地工作,讓**盡可能有效地執行所期望地任務。這包括消除不必要地函式呼叫、條件測試和記憶體引用。第二步,利用處理器提供地指令級並行能力,同時執行多條指令。

消除迴圈地低效率。避免在迴圈判斷地時候呼叫函式,而是將該函式地結果賦給乙個區域性變數。這種優化稱為**移動。

減少過程呼叫。

消除不必要地記憶體引用。

通過理解現代處理器的效能和特點進行優化,不展開了。

迴圈展開。通過增加每次迭代計算的元素的數量,減少迴圈的迭代次數。

提高並行性。但是,如果我們的並行度p超過了可用的暫存器數量,那麼編譯器會訴諸溢位(spilling),將某些臨時值存放到記憶體中,通常是在執行時堆疊上分配空間。此時效率可能變差。

理解記憶體的效能,了解載入和儲存的效能及影響等。

優化程式效能的基本策略:

CSSAPP稀里糊塗的讀書筆記(十)系統級I O

本章介紹unix i o 和標準i o的一般概念,具體的細節什麼的還是看書比較好。乙個linux 檔案就是乙個 m 個位元組的序列,所有的i o裝置都被模型化為檔案,而所有的輸入和輸出都被當作對響應檔案的讀和寫來執行。這種將裝置優雅地對映為檔案地方式,允許linux核心引出乙個簡單 低階地應用介面,...

總是稀里糊塗的移位操作

先要了解一下c語言裡所有的位運算都是指二進位制數的位運算。即使輸入的是十進位制的數,在記憶體中也是儲存為二進位制形式。用法 格式是 a 0。功能 將整型數a按二進位制位向左移動m位,高位移出後,低位補0。用法 格式是 a m,a和m必須是整型表示式,要求m 0。功能 將整型數a按二進位制位向右移動m...

mysql運維 讀書筆記 Mysql 讀書筆記

mysql儲存時間有兩種型別 datetime和timestamp。分別說一下兩者的區別。datetime,以8位元組儲存時間,理論上可以從0000年儲存到9999年。並且沒有時區的概念,它儲存的就是乙個時間點的概念。timestamp和datetime最主要的不同就是,它是以4個位元組儲存,由19...