語句效能的巨大差異 深入理解計算機系統

2021-09-24 03:32:56 字數 876 閱讀 4896

switch與if

switch用了乙個叫做跳轉表的資料結構來進行變數與數值的查詢,具體實現看起來莫名其妙,但是結果就是無論數值範圍多大,都可以直接定位到數值,而不需要一一對比.

if判斷句式,就是對後面的判斷句進行計算,得出bool值之後進行跳轉,需要一項一項地去做對比,switch是一旦對比出結果,會執行往後的所有case ,除非用來break . 而if只是乙個分支語句.

效率對比

switch不需要進行一一對比,所以case越多 相應else if也會越多, 那麼switch的效率就會越來越明顯, 晚上有量化帖子說, 在分支語句達到4個以上的時候, 用switch比較明顯

使用總結

switch適合對變數做 == 或者!=的判斷行為, 而if適合所有行為, 或者說更適合範圍性的行為, 因為別無選擇.

但分支語句超過4個以後, 盡可能的選擇switch語句

語言的共通性

python是沒有switch語句的, 儘管python的哲學以簡便著稱, 那是以隱藏了大部分細節為代價的, 這樣看似簡單, 實則對沒種語句效率的理解就不會跟c一樣明顯, 我猜測 in 是用類switch的方法實現的. 理解c的效率要靠彙編, 而理解python要靠c , 學無止境.

定長陣列與動態陣列

定長陣列是在編譯階段就可以確定的陣列長度,而動態陣列是在二進位制**執行階段才能確定的陣列長度, 動態陣列使用起來極其方便,然而代價卻很大.差距往往是數量級的.

動態的版本必須用乘法指令對i伸縮n倍,而不能用一系列的移位和加法.在一些處理器中,乘法會招致嚴重的效能處罰,但是在這種情況中無可避免. p182

其中#define預處理是在編譯前就確定的常數, 而const 則是編譯完成以後的 變數, 區別比較明顯.

深入理解計算機的字長

1.計算機字長一般指的是,所謂n位的cpu其中n是指什麼?在同一時間中處理二進位制數的位數叫字長。通常稱處理字長為8位資料的cpu叫8位cpu,32位cpu就是在同一時間內處理字長為32位的二進位制資料。2.計算機的字長是什麼意思?位 bit 表示二進位制位。位是計算機內部資料儲存的最小單位,乙個二...

程式效能優化 深入理解計算機系統

對暫存器的訪問的優化 暫存器訪問優化的核心是盡量避免打斷流水線 a.指令之間資料依賴的時候 如存在對同乙個暫存器的讀寫依賴 b.指令之間存在控制依賴的時候 如條件轉移 注意的是,並不是只有兩條相鄰的指令才會存在依賴 只要是同時出現在流水線中任意兩條指令都可能出現依賴 以f fetch d decod...

優化程式效能 《深入理解計算機系統》

1 高階設計 適當的演算法和資料結構 2 基本編碼原則 使編譯器產生高效的 理解 編譯器 的能力和侷限性,消除不必要的內容 消除連續的函式呼叫 消除不必要的儲存器引用,要考慮是否為 同一位址 以上兩點,也是妨礙編譯器優化的主要因素,編譯器很難判斷以進行優化。3 低階優化 將乙個任務分成多個部分,利用...