淘寶筆試題

1、C++性能瓶頸問題,怎樣解決?

 

 

 

  • 缺頁導致的外部存儲調用,引起IO消耗瓶頸。
  • 動態內存申請和釋放。在C/C++中,從堆中申請和釋放內存是一個複雜的過程,因此要儘可能優先考慮從棧中獲得內存。
  • 複雜對象的創建和銷燬。對象的調用往往涉及到深層次的遞歸調用,從而隱形的引起臨時對象。
  • 函數調用。函數調用有固定的開銷,當函數調用引起的開銷大於函數自身處理的開銷時,需要考慮內聯函數。
  • 詳細的內容參考http://blog.csdn.net/age2cn/archive/2010/07/21/5752431.aspx

2、存取效率問題:

 

【1】和【2】的效率怎麼樣?

答:aaaaaaaaaaa是在運行時刻賦值的; 而bbbbbbbbbbb是在編譯時就確定的;

 但是,在以後的存取中,在棧上的數組比指針所指向的字符串(例如堆)快。 

對應的彙編代碼
【1】: a = c[1];
00401067 8A 4D F1 mov cl,byte ptr [ebp-0Fh]
0040106A 88 4D FC mov byte ptr [ebp-4],cl
【2】: a = p[1];
0040106D 8B 55 EC mov edx,dword ptr [ebp-14h]
00401070 8A 42 01  mov al,byte ptr [edx+1]
00401073 88 45 FC  mov byte ptr [ebp-4],al
【1】在讀取時直接就把字符串中的元素讀到寄存器cl中,

【2】則要先把指針值讀到edx中,在根據edx讀取字符,顯然慢了。

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章