標籤:使用 c++ new c ar size
1.位元組邊界對齊 提高讀寫速度
2.建構函式盡量使用初始化列表(不然物件類型會有一次預設構造 初始值)
3.盡量使用前置++ ,因為後置++會產生臨時對象
4.不要用結構體著函數傳回值
struct a;
a=f(1) ;
會產生臨時對象
struct a = f(1); 這樣不會產生臨時對象
5.避免使用賦值形構造(可以在建構函式前加explicit避免----不允許隱式轉換)
std::string s= "hello"; 這句的實際操作是s = std::string temp("hello");
有一個臨時對象產生,正確的做法為std:string s("hello"); 直接調用建構函式
6.簡化迴圈內的處理((1)必須把重複操作放到迴圈外面 (2)最忙的迴圈放在裡面)
7.盡量避免使用遞迴,最好轉化成迴圈(必須要用,必須有確定的跳出條件)
8.少用浮點數(*10,*100轉成整數處理)
9.函數參數(複雜結構)傳指標或者引用----避免拷貝構造
10.關鍵路徑上不使用字串格式化I/O(字串格式化很慢)
11.不要隨便申請記憶體(能不new,就不要New),用棧區記憶體
string是動態大小的,空間不夠時會New記憶體,用C語言字串比C++ string快很多
12.用sizeof(編譯時間計算好了),不用strlen(運行時才計算)
char a[10] = “hello”;
sizeof(a);
strlen(a);
結果為: 10 5
13.經常申請小於128k的堆區空間,會導致記憶體膨脹
因為小塊記憶體,是直接通過位移堆低指標來實現的,只有最新的都釋放了,才會釋放之前的記憶體,不斷申請就會導致膨脹
14.慎用STL容器---濫用堆區小塊記憶體
15. vector deque list 選擇合適的容器
std::vector為一段連續的空間, 增刪需要移動記憶體塊,甚至需要重新分配記憶體
deque為多塊定長堆區數組串起來
std::list雙向環形鏈表
map
hash表
16.多線程
互斥鎖
讀寫鎖
條件鎖
自旋鎖
屏障鎖
17.高效I/O kqueue epoll