1. 程式人生 > >注意!C++值傳遞對記憶體進行全拷貝!

注意!C++值傳遞對記憶體進行全拷貝!

       很多剛學C++的程式設計師寫程式碼時,不會特別注意函式引數的傳遞方式,對CString等型別引數會直接使用值傳遞的方式,下面我們通過一段程式碼驗證下值傳遞對程式記憶體及效能的影響。

        為了能直觀的看到對比結果,我們分別以std::list和CSimpleArray舉例,原始碼及記憶體情況如下:

std::list


CSimpleArray


       通過對比圖可以看到,std::list在進入函式時會對list內所有節點進行全拷貝,記憶體直接增長一倍,同時由於記憶體拷貝需要消耗一定時間,進入函式時卡頓較長時間。

        CSimpleArray經過了一定優化,首次進入函式時沒有進行拷貝,讀取也不會重新拷貝,但在寫入值時,會進行拷貝。

       通過上述程式碼可以看出,函式值拷貝會極大的佔用記憶體,同時消耗效能,如果程式中存在大量值拷貝過程,程式的瞬時記憶體會非常大,同時程式執行效率會非常低。

總結

        各位初學C++的小夥伴要注意了,熟練使用不同的傳遞方式是很重要的,同時,做程式效能優化時,可以首先檢查函式的引數傳遞方式,說不定是一個無腦提高程式效能的一個方式。