內(nèi)存的5大區(qū)域


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)后出)

棧空間分靜態(tài)分配和動態(tài)分配兩種

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)會?動的將多余的那
    部分重新放?空閑鏈表中
    申請大?。憾咽窍?地址擴(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)??泛

    缺點(diǎn):效率有?定降低,容易產(chǎn)生碎片。

3.全局區(qū)(靜態(tài)區(qū)) (static)

全局區(qū)(靜態(tài)區(qū)):全局變量和靜態(tài)變量的存儲是放在?起的,初始化的全局變量和靜
態(tài)變量存放在?塊區(qū)域,未初始化的全局變量和靜態(tài)變量在相鄰的另?塊區(qū)域,程序結(jié)束后

有系統(tǒng)釋放。

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);
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容