C++代碼基本優化小技巧


1.不存在指向空值的引用,意味着引用比指針的效率更高,因為在使用引用之前不需要測試它的合法性;指針可以被重新賦值以指向另一個不同的對象,但是引用總是指向它初始化時指定的對象。

2.使用位運算代替加減乘除取余等計算。

3.用switch代替多層if else,看匯編代碼可知,switch有點空間換時間的意思。如果switch不可行,則將最常見的場景放在if分支鏈的最前面。

4.減少函數調用,函數調用需要兩次跳轉,外加棧內存操作。

5.使用內聯函數處理代碼量小的函數來消除函數調用開銷,空間換時間,實際工作中,如果代碼量不是很大,我一般都會使用強制內聯的方式  __attribute__((always_inline))。

6.防止淺拷貝,例如有一個Simple的類,最好把Simple(),Simple(const Simple&), Simple& operator=(const Simple&)聲明為私有,或者繼承boost的noncopyable庫,class Simple : public boost::noncopyable{}。

7.減少臨時對象的使用。

8.a+=b的形式效率會高於a=a+b,所以使用時首先考慮使用+= -= *= 和 /=,而不是使用+ - * /。

9.在cache級別進行優化(例如使一個結構正好充滿一個cache行,增加命中率等,此處內容較多,以后有機會再具體分析)。

10.如果可能,對象盡量放在棧上,不要放在堆上,即初始化的時候使用A  a(變量1,變量2,...),而不是A  a = new(變量1,變量2,...)。

11.盡量使用初始化列表進行初始化工作,例如:A::A() : a(0), b(0), c(0) {},而不是初始化函數A::A() { a= b = c = 0; } 。

12.如果函數並不需要返回值,不要定義。

13.盡量減少你程序的計算量,例如在草稿紙上簡化你的計算式。

14.不需要的數據,不要去初始化,初始化大塊內存,使用memset。

15.考慮使用profiler和vtune等性能分析工具識別程序中的耗時部分,已准確定位到可以優化的部分。

16.在for語句循環遞增變量的時候,使用++i,而不是后置的i++,因為前者不需要返回一個臨時對象.

17.減少內存的拷貝操作,減少循環和遞歸的使用,能用指針替換的絕對不拷貝傳遞整塊內存。

18.vector的clear方法並不能把內存回收,要使用swap來回收內存。

19.使用stl容器的時候,建立指針的容器而不是對象的容器,因為拷貝指針很快。

20.函數中傳參數的時候,如果是大對象(vector等)盡量傳引用。

21.如果每次循環迭代都需要對測試條件求值,並且該值的大小不會隨着循環的進行而改變時,那么在循環外面計算出該值。

for (int i = 0; i < length(val); ++i) {}

這個length()求出的值是固定的,所以在循環外求出即可。

 

推薦鏈接 :http://coolshell.cn/articles/7490.html

參考鏈接:http://blog.jobbole.com/67880/

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM