記憶體分為5個區:棧,堆,自由儲存區,全域性/靜態儲存區,常量儲存區。
棧區:記憶體由編譯器再需要時自動分配和釋放。通常用來儲存區域性變數和函式引數。(為執行函式而分配的區域性變數,函式引數樹,返回位址等存放在棧區)。棧執行分配內置於處理器的指令之中,效率高,但是分配的記憶體容量有限。
堆區:記憶體由new分配的記憶體塊,他們的釋放搬移其不管,有我們的應用程式區控制,一般乙個new就要對應乙個delete,如果程式設計師沒有釋放掉,那麼程式救贖後,作業系統自動**。
c++棧區記憶體與堆區記憶體的區別
自由儲存區:使用malloc進行分配,使用free進行**。和堆類似。
全域性/靜態儲存區:全域性變數和靜態變數備份陪到同一塊記憶體中,c語言中分初始化和未初始化的,c++中不再區分。(全域性變數,靜態資料,常量存放再全域性資料區)
常量儲存區:儲存常量,不允許被修改。
靜態儲存區:記憶體再程式編譯的時候就已經分配號,這塊記憶體再程式的整個執行期間都存在。它主要存放警惕啊資料,全域性資料和常量。
棧區:在執行函式時,函式內區域性變數的儲存單元都可以在棧上建立,函式執行結束時這些儲存單元自動被釋放。棧記憶體分配運算內建與處理器的指令集中,效率很高,但是分配的記憶體容量有限。
堆區:亦稱作動態記憶體分配。程式再執行的時候用malloc或new申請任意大小的記憶體,程式設計師自己負責在適當的時候使用free或delete釋放記憶體。動態記憶體的生存其可以有我們決定,如果我們不是放記憶體,程式將再最後才釋放掉動態記憶體。但是,良好的程式設計習慣是:如果某動態記憶體不再使用,需要將其釋放掉,否則,我們認為發生了記憶體洩漏現象。
典型c++記憶體區域:
解析:****** :
int fun()
new分配類一塊堆記憶體,指標p分配了乙份棧記憶體,所以這句話的意思是:在棧記憶體中存放了乙個指向一塊堆記憶體的指標p。程式會先確定堆中分配記憶體的大小,然後呼叫operator new分配記憶體,然後返回這塊記憶體的首位址,放入棧中。
注意釋放堆記憶體時,我們需要使用delete p;
#include #include int a = 0; //全域性初始化區
char *p1;//全域性未初始化區
int main()
參考文章: C 記憶體管理 C 記憶體分類
c 記憶體管理 記憶體分類 moakap 在編寫程式過程中,程式設計師必須清楚程式記憶體的分配機制,合理進行記憶體管理,這樣才能得到高效的程式。同時,如果對c 記憶體分配基本概念不理解,使用不當,一方面浪費了寶貴的記憶體資源,降低了程式執行效率,另一方面還會造成程式中意想不到的錯誤。在 c 程式中,...
C語言中的記憶體分類
1 棧 stack 由編譯器自動分配釋放,存放 函式的引數值 區域性變數的值 返回位址等,其操作方式類似於資料結果中的棧。棧又稱堆疊,是使用者存放程式臨時建立的區域性變數,也就是說我們函式括弧 中定義的變數 但不包括static 宣告的變數,static 意味著在資料段中存放變數 除此以外,在函式被...
記憶體管理分類
在編寫程式過程中,程式設計師必須清楚程式記憶體的分配機制,合理進行記憶體管理,這樣才能得到高效的程式。同時,如果對c 記憶體分配基本概念不理解,使用不當,一方面浪費了寶貴的記憶體資源,降低了程式執行效率,另一方面還會造成程式中意想不到的錯誤。在c 程式中,把記憶體分為4 類,程式儲存區 靜態資料儲存...