作業系統給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執行的機器指令。區是共享的,共享的目的是對於頻繁被執行的程式,只需要在記憶體中有乙份 即可。區是唯讀的,使其唯讀的原因是防止程式意外地修改了它的指令 全域性區 存放...