C C 筆記 記憶體四區模型

2021-10-08 20:19:04 字數 889 閱讀 1762

作業系統給c/c++編寫的程式分配記憶體,通常將分配的記憶體劃分為以下四個區域:

用於存放函式的引數值,區域性變數的值等。其操作方式類似於資料結構中的棧。用完由作業系統自動釋放,一般是由編譯器自動分配釋放的。棧向下生長,棧分配的位址越來越小。

動態分配給程式的記憶體區域,由程式設計師手動釋放,若程式設計師不釋放,程式結束時可能由os**。這裡的堆並不等於資料結構裡的堆,分配方式更類似於鍊錶。堆向上生長,當給變數分配記憶體時,而堆分配的位址則越來越大

程式結束後由系統釋放

第一種:常量區:存放常量,一般是字串常量

第二種:全域性區/靜態區(static):存放全域性變數和靜態變數,初始化的全域性變數和靜態變數在一塊區域, 未初始化的全域性變數和未初始化的靜態變數在相鄰的另一塊區域。

存放函式體(語句)的二進位制**。

c/c++在臨時區分配記憶體,用完後自動被編譯器清理

int a = 1;//區域性變數,放到棧區,空間自動分配釋放

int *p = &a;//語句,放到**區

p = (int *) malloc(sizeof(int))//動態申請,放到堆區,空間手動釋放

static int i = 5;//靜態變數,資料區

#define pi 3.14;//常量,資料區

這張圖的流程:

1、作業系統把物理硬碟**load到記憶體

2、作業系統把c**分成四個區

3、作業系統找到main函式入口執行

4、總: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...

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

在程式編譯後,生成了exe可執行程式,未執行該程式前分為兩個區域 區和全域性區 區 存放函式體的二進位制 由作業系統進行管理 存放cpu執行的機器指令。區是共享的,共享的目的是對於頻繁被執行的程式,只需要在記憶體中有乙份 即可。區是唯讀的,使其唯讀的原因是防止程式意外地修改了它的指令 全域性區 存放...