c 記憶體管理

2021-05-23 22:38:11 字數 856 閱讀 4624

這裡對我暫時所了解的記憶體機制做個記錄,以後再補。

首先是記憶體分配:

記憶體主要分為3個部分:

一是從靜態儲存區域分配。編譯時分配好,主要存放全域性變數,static變數,程式結束釋放。

二是從堆疊區域分配。函式內區域性變數存放的地方。隨變數生命週期自動釋放。效率較高,但大小有限。

三是從記憶體池分配,即從堆上分配。程式在執行時,採用new或malloc建立。必須由程式設計師手動呼叫delete和free釋放。

然後是new/delete:記憶體洩露主要是由new和delete的不配套呼叫產生的

呼叫new的時候,會做分配空間->初始化->建構函式工作。(malloc不會呼叫建構函式,所以最好使用new)。

呼叫delete的時候,會自動呼叫析構函式。delete釋放指標所指向空間,指標並沒有被刪除,最好手動設定指標為null。

最後,當node *a = new node(); node *b = a;可以使用delete b;來釋放指標a所指向的空間。 附:

測試是否有記憶體洩露的方法:

#define _crtdbg_map_alloc

#include

#include

如果定義了_crtdbg_map_alloc,列印出來的是檔名和行數等更加直觀的資訊。

在程式入口寫幾個語句:

int tmpflag = _crtsetdbgflag( _crtdbg_report_flag );

tmpflag |= _crtdbg_leak_check_df;

_crtsetdbgflag( tmpflag );

程式退出時,如果發現有記憶體洩漏,會自動在debug output視窗和debugview中輸出記憶體洩漏資訊

C 記憶體管理 C 記憶體分類

c 記憶體管理 記憶體分類 moakap 在編寫程式過程中,程式設計師必須清楚程式記憶體的分配機制,合理進行記憶體管理,這樣才能得到高效的程式。同時,如果對c 記憶體分配基本概念不理解,使用不當,一方面浪費了寶貴的記憶體資源,降低了程式執行效率,另一方面還會造成程式中意想不到的錯誤。在 c 程式中,...

C 記憶體管理

在嵌入式系統中使用c 的乙個常見問題是記憶體分配,即對new 和 delete 操作符的失控。具有諷刺意味的是,問題的根源卻是c 對記憶體的管理非常的容易而且安全。具體地說,當乙個物件被消除時,它的析構函式能夠安全的釋放所分配的記憶體。這當然是個好事情,但是這種使用的簡單性使得程式設計師們過度使用n...

C 記憶體管理

程式設計師們經常編寫記憶體管理程式,往往提心吊膽。如果不想觸雷,唯一的解決辦法就是發現所有潛伏的地雷並且排除它們,躲是躲不了的。本文的內容比一般教科書的要深入得多,讀者需細心閱讀,做到真正地通曉記憶體管理。1 記憶體分配方式 記憶體分配方式有三種 1 從靜態儲存區域分配。內存在程式編譯的時候就已經分...