

1.棧區(qū)(stack)
棧區(qū):由編譯器?動分配并釋放,存放函數(shù)的參數(shù)值,局部變量等。棧是系統(tǒng)數(shù)據(jù)結(jié)構(gòu),對應(yīng)線程/進(jìn)程是唯?的。
申請大?。簵J窍虻偷刂窋U(kuò)展的數(shù)據(jù)結(jié)構(gòu),是?塊連續(xù)的內(nèi)存的區(qū)域。是棧頂?shù)牡刂泛蜅5?br>
最?容量是系統(tǒng)預(yù)先規(guī)定好的,棧的??是2M(也有的說是1M,總之是?個(gè)編譯時(shí)
就確定的常數(shù)) ,如果申請的空間超過棧的剩余空間時(shí),將提示溢出,能從棧獲得的空間較?。
系統(tǒng)響應(yīng)方法:存儲每?個(gè)函數(shù)在執(zhí)?的時(shí)候都會向操作系統(tǒng)索要資源,棧區(qū)就是函數(shù)運(yùn)?時(shí)的內(nèi)存,棧區(qū)中的變量由編譯器負(fù)責(zé)分配和釋放,內(nèi)存隨著函數(shù)的運(yùn)?分配,隨著函數(shù)
的結(jié)束?釋放,由系統(tǒng)?動完成。
注意:只要棧的剩余空間?于所申請空間,系統(tǒng)將為程序提供內(nèi)存,否則將報(bào)異常提
示棧溢出。
優(yōu)點(diǎn):快速?效,不會產(chǎn)生碎片
缺點(diǎn):有限制,數(shù)據(jù)不靈活。(先進(jìn)后出)

2.堆區(qū)(heap)
堆區(qū): 由程序員分配和釋放,用new/alloc方法創(chuàng)建的對象,手動申請空間,如果程序員不釋放,程序結(jié)束時(shí),可能會由操作系統(tǒng)回收 。
系統(tǒng)響應(yīng)方法:
- ?先應(yīng)該知道操作系統(tǒng)有?個(gè)記錄空閑內(nèi)存地址的鏈表。
- 當(dāng)系統(tǒng)收到程序的申請時(shí),會遍歷該鏈表,尋找第?個(gè)空間?于所申請空間的堆
結(jié)點(diǎn),然后將該結(jié)點(diǎn)從空閑結(jié)點(diǎn)鏈表中刪除,并將該結(jié)點(diǎn)的空間分配給程序。 -
由于找到的堆結(jié)點(diǎn)的??不?定正好等于申請的??,系統(tǒng)會?動的將多余的那
缺點(diǎn):效率有?定降低,容易產(chǎn)生碎片。
部分重新放?空閑鏈表中
申請大?。憾咽窍?地址擴(kuò)展的數(shù)據(jù)結(jié)構(gòu),是不連續(xù)的內(nèi)存區(qū)域。這是由于系統(tǒng)是?鏈表來
存儲的空閑內(nèi)存地址的,?然是不連續(xù)的,?鏈表的遍歷?向是由低地址向?地址。堆的??受限于計(jì)算機(jī)系統(tǒng)中有效的虛擬內(nèi)存。由此可?,堆獲得的空間?較靈活,也?較?。
優(yōu)點(diǎn):靈活?便,數(shù)據(jù)適應(yīng)??泛
3.全局區(qū)(靜態(tài)區(qū)) (static)
全局區(qū)(靜態(tài)區(qū)):全局變量和靜態(tài)變量的存儲是放在?起的,初始化的全局變量和靜
態(tài)變量存放在?塊區(qū)域,未初始化的全局變量和靜態(tài)變量在相鄰的另?塊區(qū)域,程序結(jié)束后

4.常量去/數(shù)據(jù)段
用來存儲已經(jīng)初始化的全局變量,靜態(tài)變量,常量數(shù)據(jù),程序結(jié)束后由系統(tǒng)釋放
5.代碼段
存放函數(shù)的?進(jìn)制代碼(用來存儲程序的代碼/指令)
//全局初始化區(qū)
int a = 10;
//全局未初始化區(qū)
char *p;
main {
//棧區(qū)
int b;
//棧
char s[] = "abc";
//棧
char *p1;
//常量區(qū)
char *p2 = "1234";
//全局(靜態(tài))初始化區(qū)
static int c = 0;
//分配來的10和20字節(jié)的區(qū)域在堆區(qū)
m = (char *)malloc(10);
n = (char *)malloc(20);
}
