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

2021-08-14 12:23:39 字數 678 閱讀 8681

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

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

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

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

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

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

C 可否對記憶體進行直接的操作

c 可否對記憶體進行直接的操作 可以使用指標 在這篇文章中將描述c 的乙個特性指標和所謂的不安全 非安全 非安全 就是不在 clr 完全控制下執行的 它有可能會導致一些問題,因此他們必須用 unsafe 進行表明 unsafe 在其他一些地方也可以使用關鍵字 unsafe 例如我們可以將類或方法表明...

C 可否對記憶體進行直接的操作

可以使用指標 在這篇文章中將描述c 的乙個特性指標和所謂的不安全 非安全 非安全 就是不在 clr 完全控制下執行的 它有可能會導致一些問題,因此他們必須用 unsafe 進行表明 unsafe 在其他一些地方也可以使用關鍵字 unsafe 例如我們可以將類或方法表明為非安全的 unsafe cla...

c專家程式設計 對記憶體的思考

1 intel 80x86系列處理器的發展歷程 4008 8008 8080 8085 8086 80186 80286 80386 80486 pentium 32 2 記憶體模型以及它的工作原理 段的含義 一塊64kb的記憶體區域,有乙個段暫存器所指向。記憶體位址的形成 取得暫存器的值,左移4位...