C 程式記憶體分割槽通俗理解

2021-10-05 04:31:21 字數 1598 閱讀 5281

知識點:

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

2、堆區(heap):一般由程式設計師分配釋放,隨叫隨到,揮之即走。

3、全域性/靜態區(global/static):全域性變數和靜態變數的儲存是放在一起的,在程式編譯時分配。

4、文字常量區:存放常量字串。-常量不能修改-同乙個名字只儲存乙份

5、程式**區:存放函式體(包括類的成員函式、全域性函式)的二進位制**-以上以外的所有執行指令

示例:

#include

#include

#define worker_max 64

//①棧區:函式內部區域性變數,函式形參

void

saylove

(const

char

*msg)

else}}

//②堆區:動態記憶體

//③全域性區和靜態區:全域性變數和靜態變數

int patriarch =66;

void

boudoir

(int family)

else

printf

("girl=%d\n"

, girl)

;printf

("boudoir patriarch=%d\n"

, patriarch);}

//④常量區:常量字串

//⑤程式**區:函式體(包括類的成員函式、全域性函式)的二進位制**

intmain1()

else

if(n >1)

for(

int i=

0; i

)//=free (salary);

delete [

] salary;

}else

if(n <=0)

//-----------③-----------

boudoir(0

);boudoir(0

);//靜態變數只初始化一次

cout <<

"這裡的靜態變數:"

<

//girl×

//只函式內部呼叫有效

printf

("main patriarch=%d\n"

, patriarch)

;//-----------④-----------

const

char

*p1 =

"童養媳"

;//兩指標指向同一常量字串,觀察兩指標內容的位址

const

char

*p2 =

"童養媳"

;printf

("p1=0x%p p2=0x%p\n"

, p1, p2)

;//p1=p2-同一常量字串只占用乙個位址空間

system

("pause");

return0;

}

C語言記憶體分配 通俗理解

最近很多同學希望了解c語言的記憶體分配,雖然可以在網際網路上找到諸多的講解,但是你會發現要麼不通俗易懂,要麼不算太全面。而這些對於新手而言,又絕對會把你弄得暈頭轉向的,所以在此對網上和書本上的諸般講解,進行了通俗的翻譯和總結。在說記憶體分配之前,先提一點題外話,因為在和同學們講解記憶體分配的時候,他...

C 程式的記憶體分割槽

乙個程式本質上都是由.bss段 data段 text段三個組成的。data段包含三個部分 heap 堆 stack 棧 和靜態資料區。text段存放 區。bss裡面裝載了未被初始化的資料 如圖 示例如下 int a 0 全域性初始化區 靜態區 char p1 全域性未初始化區 bss段 int ma...

c 記憶體分割槽

堆 由程式設計師手動分配和釋放,完全不同於資料結構中的堆,分配方式類似鍊錶。由malloc c語言 或new c 來分配,free c語言 和delete c 釋放。若程式設計師不釋放,程式結束時由系統釋放。棧 由編譯器自動分配和釋放的,存放函式的引數值 區域性變數的值等。操作方式類似資料結構的棧。...