1. 程式人生 > >C++——記憶體管理

C++——記憶體管理

C++中有三種記憶體管理的方式:自動儲存,靜態儲存和動態儲存;

自動儲存

在函式內部定義的普通變數的儲存方式——在函式(或者程式碼塊)執行時自動產生,在呼叫結束的時候消亡;通常儲存在棧中;程式碼塊執行時依次入棧,執行結束時依次出棧;

靜態儲存

在函式外部定義或者使用關鍵字static定義的變數被稱為全域性變數——在程式執行的整個期間存在(在程式碼塊被重複呼叫的時候侯靜態變數不會被重複初始化,而是保持上次呼叫之後的值不變,也就是說,每次呼叫結束的時候,靜態變數的值仍然保持);程式執行結束後釋放;

動態儲存

使用關鍵字new開闢的記憶體屬於動態儲存;這種記憶體由記憶體池(或者叫棧)提供,在程式執行(並非編譯時)時動態開闢;——可以自主開闢和釋放;所以不受程式或者函式的生命週期的影響;

 

記憶體洩漏

使用new在自由儲存空間(或者堆)開闢的記憶體如果在使用完之後不去主動釋放,導致的結果是:在程式執行完畢之後,指向這塊記憶體的指標會失效(開闢的空間是使用指標進行管理的,而指標則是一般的自動儲存的變數),但是指標原來指向的記憶體不會自己釋放;所以在之後的程式的執行過程中這塊記憶體將永遠無法釋放,而由於不斷地開闢新的記憶體,導致程式的記憶體被耗盡而崩潰,

而這種洩露的結果將是非常嚴重的;

 

 

所以呢,在使用C++或者C寫程式的時候,在自己開闢了動態記憶體空間之後一定要使用free或者delete釋放;