1 記憶體分割槽模型
c++程式在執行時,將記憶體大方向劃分為4個區域
**區:存放函式體的二進位制**,由作業系統進行管理的
全域性區:存放全域性變數和靜態變數以及常量
棧區:由編譯器自動分配釋放, 存放函式的引數值,區域性變數等
堆區:由程式設計師分配和釋放,若程式設計師不釋放,程式結束時由作業系統**
我的理解是:main函式中有個指標p變數是主函式的區域性變數,他是隨主函式結束而自動釋放的,而其他建立的函式變數是該函式執行完就消失的。老師第一次是在主函式中的變數指向建立函式棧區變數的位址,自然會釋放。而第二次是指向建立堆區的位址,堆區不會隨建立的函式而釋放。
棧區: 由編譯器自動分配釋放, 存放函式的引數值,區域性變數等
注意事項:不要返回區域性變數的位址,棧區開闢的資料由編譯器自動釋放
int * func()
int main() //這是棧區 ,位址上的值會隨函式結束而消去
堆區:
由程式設計師分配釋放,若程式設計師不釋放,程式結束時由作業系統**
在c++中主要利用new在堆區開闢記憶體
int* func()
int main() {
int *p = func();
cout << *p << endl;
cout << *p << endl;
system("pause");
return 0;
堆區資料由程式設計師管理開闢和釋放
堆區資料利用new關鍵字進行開闢記憶體
堆區和棧區
1 棧區 stack 由編譯器自動分配釋放,存放函式的引數值,區域性變數的值等。2 堆區 heap 一般由程式設計師分配釋放,若程式設計師不釋放,程式結束時可能由系統 3 全域性區 靜態區static 全域性變數和靜態變數的儲存是放在一塊的,初始化的全域性變數和靜態變數在一塊區域,未初始化的全域性變...
棧區和堆區
注意,這裡所說的堆區和棧區指的是 虛擬 記憶體區域,跟資料結構中的堆疊不一樣。棧區 stack 由編譯器自動分配釋放,存放區域性變數的值 函式呼叫所需要維護的資訊等。棧區必須滿足這樣一條規則 先入棧的資料後出棧 first in last out,filo 堆區 heap 一般由程式設計師分配釋放,...
堆區和棧區
棧區 由編譯器自動分配並釋放 存放函式的引數值 區域性變數等 棧空間分靜態分配和動態分配 靜態分配是編譯器完成的比如自動變數 auto 的分配,棧的動態分配無需釋放,也就沒有釋放函式 堆區 由程式設計師分配和釋放,如果程式設計師不釋放,程式結束時,可能會由作業系統 比如ios中的alloc都是存放堆...