高效能編碼準則

來源:互聯網
上載者:User

標籤:使用   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

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.