9.2.1 棧區
棧區存放區域性變數、函式引數等,棧區的資料由編譯器管理開闢和釋放。
由於區域性變數在使用完後即銷毀,所以不要返回區域性變數的位址。
#include
using
namespace std;
int*
func()
intmain()
這一段**中,我們在函式func返回了區域性變數a的位址,但函式執行完後,a會被釋放,那麼a的位址也沒有意義了,成為了乙個野指標。
但此時繼續對a的位址解引用,發現第一次可以成功得到a的值,這是因為編譯器為我們做了一次保留。不得不說,編譯器為我們操碎了心。
9.2.2 堆區
堆區的資料由程式設計師自己管理分配和釋放,如果程式設計師不釋放,則在程式結束後自動釋放。
c++中主要使用new關鍵字在堆區開闢資料。
對於上面的示例,改一行**:
#include
using
namespace std;
int*
func()
intmain()
在func裡,我們將資料10存放在了堆區,這樣即使函式執行完,只要程式不退出或則不主動釋放,資料10都一直存在。
C 記憶體分割槽模型
c 程式在執行時,將記憶體大方向劃分為4個區域 區 存放函式體的二進位制 由作業系統進行管理的 全域性區 存放全域性變數和靜態變數以及常量 棧區 由編譯器自動分配釋放,存放函式的引數值,區域性變數等 堆區 由程式設計師分配和釋放,若程式設計師不釋放,程式結束時由作業系統 位址高低 棧區 堆區 全域性...
c 記憶體分割槽模型
區 存放所有 的二進位制 全域性區,存放全域性變數,靜態變數,常量 棧區,編譯器自動分配與釋放,存放函式引數值和區域性變數,隨函式結束而釋放 堆區,有程式設計師進行分配與釋放,或者函式結束時自動釋放 不同區域用於存放那個不同的資料,有不同的生命週期 在程式編寫完,編譯後,生成exe檔案,這時已經出現...
C 基礎 記憶體模型記憶體分割槽模型
區 存放函式體的二進位制 由作業系統進行管理 全域性區 存放全域性變數和靜態變數以及常量 棧區 由編譯器自動分配釋放,存放函式的引數值 區域性變數等 堆區 由程式設計師分配和釋放,若程式設計師不釋放,程式結束時由作業系統 存放cpu執行的機器指令,區是共享的,只有乙份 是唯讀的。存放全域性變數 定義...