最近入職新公司,要做乙個高效能的專案,對比之前公司的**,確實有一些細節是能夠提公升效能的,所以記錄一下,發現一點就記錄一點(不侷限於公司專案中用到的,其它地方看到的也會記錄),持續更新~
#define likely(x) __builtin_expect(!!(x), 1) //x很可能為真
#define unlikely(x) __builtin_expect(!!(x), 0) //x很可能為假
bool func1(string s1, string s2)
bool func2(string *s1, string *s2)
bool func3(string &s1, string &s2)
其中若使用函式func1(值傳遞),則在引數傳遞和函式返回時,需要呼叫string的建構函式和析構函式兩次,而函式func2和func3則不需要呼叫析構和建構函式。因為指標和引用都不會建立新的物件。
把相關**放在一起有兩個涵義,一是相關的原始檔要放在一起;二是相關的函式在檔案裡面,也應該是相鄰的。這樣,在可執行檔案被載入到記憶體裡面的時候,函式的位置也是相鄰的。 相鄰的函式,衝突的機率比較小。而且相關的函式放在一起,也符合模組化程式設計的要求:那就是 高內聚,低耦合。
延遲計算的意思是最近用不上的變數,就不要去初始化。通常來說,在函式開始就會初始化很多資料,但是這些資料在函式執行過程中並沒有用到(比如乙個分支判斷,就退出了函式),那麼這些動作就是浪費了。
變數初始化是乙個好的程式設計習慣,但是在效能優化的時候,有可能就是乙個多餘的動作,需要綜合考慮函式的各個分支,做出決定。
延遲計算也可以是系統層次的優化,比如cow(copy-on-write)就是在fork子程序的時候,並沒有複製父 程序所有的頁表,而是只複製指令部分。當有寫發生的時候,再複製資料部分,這樣可以避免不必要的複製, 提供程序建立的速度。
有些變數,需要通過呼叫函式計算一次,多次使用的時候,最好是提前計算一下,儲存結果,以後再引用,避免每次都重新計算一次。能使用常數的地方,盡量使用常數,加減乘除都會消耗cpu的指令。
mysql 效能優化點記錄
mysql 效能優化點記錄 第一章myisam,可以基於blob和text的前500位元組,建立索引 myisam 支援fulltext 延遲更新索引 delay key write create table table3 id int 11 not null auto increment,name...
flex mobile效能優化點
這個mobile開發,一般原生開發也許是最合適的方式,但是涉及到跨平台的問題,有精力的團隊一般都會逐個基於移動作業系統進行開發。但是我追求短小,精悍,快速。於是我希望能夠跨平台,基於html5開發是乙個不錯的選擇,但是終究因為團隊更熟悉flex,於是決定採用flex mobile developme...
Mysql效能優化點
全值匹配我最愛 最佳左字首法則如果索引了多列,要遵守最左字首法則。具體是指,查詢的where條件從索引的最左前列開始並且不跳過索引的中間列 不在索引列上做任何操作 計算 函式 自動or手動 型別轉換 會導致索引失效 儲存引擎不能使用索引中範圍條件右邊的列 盡量使用覆蓋索引 索引列和查詢列一致 減少s...