棧區和堆區的用法

2021-10-21 14:59:55 字數 769 閱讀 9159

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都是存放堆...