那些隱藏在編碼過程中的效能(一)

2021-06-14 01:43:57 字數 1002 閱讀 2568

引言:這篇文章主要對編碼過程中的一些影響程式效能的編碼習慣進行整理說明,文中的示例主要是c/c++的語言來舉例,有些可能是偽**,但總體上應該不會影響閱讀。

可能因為篇幅和精力的問題,有些內容寫的不是很細,又或者有錯誤,可以跟我交流。

1.大迴圈放到內側

對於多重迴圈來講,將大的迴圈放到內側,可以減少壓棧出棧的次數,降低cpu開銷;

如:for(int i = 0; i < 5; i++)

和for(int i = 0; i < 500; i++)

前者相當於外迴圈有5次的壓棧出棧,後者的外迴圈卻需要500次。

2.合理的選擇資料結構

資料結構與演算法決定了程式的效能,這裡想提到的指stl容器的選擇,尤其是對於順序儲存結構和鏈式儲存結構的選擇;如vector和list的選擇,在讀操作較多的情況下,選擇順序結構,在寫操作(插入/刪除)較多的情況下選擇鏈式儲存結構;

3.鎖的粒度盡可能小

對於多執行緒程式設計而言,對於臨界資源的保護會使用到鎖機制,在使用鎖的地方要保證鎖粒度盡可能的小,只保護到需要保護的臨界資源上,可以定義所物件,在乙個{}的邏輯中終止生命週期。

對於臨界資源的原子性操作,如int變數成為臨界資源的情況下,可以不加鎖(這個與cpu和編譯器有關係,可以檢視彙編指令確認是否為原子操作)。

4.讓函式快速的返回,高概率發生的邏輯放到函式靠前的位置

示例:void func()

if (yyy)

}在寫**的過程中,可以考慮實際的業務場景,如果***發生的概率比較大,那麼,將if ***放到前面去,這樣減少不必要的計算;

5.延遲宣告

對於未使用到的變數,盡可能在使用前再宣告,以節省計算和棧空間。如:

void func()

a++;

}如上面的函式,有可能在for迴圈中已經返回,這個時候,宣告的a變數就完全沒有意義;

C C 在編譯的過程中動態指定巨集

在日常的軟體程式設計中,軟體的版本往往根據使用物件的不同而編譯出不同的版本。一種很實用的編譯方法 在編譯的過程中指定巨集,例如 gcc def.c define vip 檔名 def.c 在命令中指定巨集 gcc c define 巨集名稱 include int main 使用 gcc def.c...

C 編碼過程中的良好習慣影響效能

本文摘自論壇 1.關於for和foreach,盡量使用for,for的寫發盡量使用 for int i 0,h arr.count i h i listarr new list for int i 0 i tnum i arr.add i stopwatch watch new stopwatch ...

where子句在編寫過程中需要注意的問題

在應用系統開發初期,由於開發資料庫資料比較少,對於查詢sql語句,複雜檢視的編寫,剛開始不會體會出sql語句各種寫法的效能優劣,但是如果將應用系統提交實際應用後,隨著資料庫中資料的增加,系統的響應速度就成為目前系統需要解決的最主要的問題之一。系統優化中乙個很重要的方面就是sql語句的優化。對於海量資...