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讀取字符,顯然慢了。