知識點:
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 釋放。若程式設計師不釋放,程式結束時由系統釋放。棧 由編譯器自動分配和釋放的,存放函式的引數值 區域性變數的值等。操作方式類似資料結構的棧。...