程式的記憶體模型 記憶體四區

2021-10-07 13:34:48 字數 1849 閱讀 5557

在程式編譯後,生成了exe可執行程式,未執行該程式前分為兩個區域(**區全域性區

**區:存放函式體的二進位制**,由作業系統進行管理

存放cpu執行的機器指令。

**區是共享的,共享的目的是對於頻繁被執行的程式,只需要在記憶體中有乙份**即可。

**區是唯讀的,使其唯讀的原因是防止程式意外地修改了它的指令

全域性區:存放全域性變數和靜態變數以及常量

全域性變數和靜態變數存放在此

全域性區還包含了常量區,字串常量和其他常量也存放在此處

該區域的資料在程式結束後由作業系統釋放

#includeusing namespace std;

/*全域性變數*/

int c = 10;

int d = 10;

/*const修飾全域性常量*/

總結:c++中在程式執行前分為全域性區和**區

**區特點是共享和唯讀

全域性區中存放全域性變數,靜態變數,常量

常量區中存放const修飾的全域性常量和字串常量

棧區:由編譯器自動分配釋放,存放函式的引數值,區域性變數等

#includeusing namespace std;

/*棧區資料的注意事項--不要返回區域性變數位址

棧區的資料由編譯器管理開闢和釋放

堆區:由程式設計師分配和釋放,若程式設計師不釋放,程式結束時由作業系統收回

c++中主要利用new在堆區開闢記憶體

/*棧區資料的注意事項--不要返回區域性變數位址

棧區的資料由編譯器管理開闢和釋放

*/int * fun() //形引數據也會放在棧區

int main()

c++中利用new操作符在堆區開闢資料,堆區開闢的資料,由程式設計師受到開闢,手動釋放,釋放利用操作符delete 

語法:new 資料型別

利用new建立的資料,會返回該資料對應的型別的指標

#includeusing namespace std;

/*new的基本語法*/

int* func()

void text01()

void text02()

for (int i = 0; i < 10; i++)

//釋放堆區陣列

//釋放陣列的時候,要加才可以

deletearr;

}int main()

記憶體四區的意義

不同區域存放的資料,賦予不同的生命週期,給我們更大的靈活程式設計。

記憶體四區模型

記憶體可以先粗略的分為四個區,分別是 區,資料區,棧區和堆區。其中,資料區可以分為全域性區 靜態區 常量區。資料區內容的生命週期從程式開始到程式終止 棧區的內容從函式左括號開始,到右括號為止,函式結束後,記憶體自動釋放 堆區的內容由程式設計師自己開闢,手動釋放。區 程式指令 資料區 全域性區 靜態區...

C C 筆記 記憶體四區模型

作業系統給c c 編寫的程式分配記憶體,通常將分配的記憶體劃分為以下四個區域 用於存放函式的引數值,區域性變數的值等。其操作方式類似於資料結構中的棧。用完由作業系統自動釋放,一般是由編譯器自動分配釋放的。棧向下生長,棧分配的位址越來越小。動態分配給程式的記憶體區域,由程式設計師手動釋放,若程式設計師...

記憶體四區筆記

include include include void print arr int buf,int n int main 棧中陣列 void malloc size t size char p1 malloc sizeof char 1000 free p1 int p malloc sizeof...