日韩在线免费播放-日韩在线免费av-日韩在线免费-日韩在线毛片-国产高清不卡视频-国产高清不卡

當(dāng)前位置:首頁(yè) > 嵌入式培訓(xùn) > 嵌入式學(xué)習(xí) > 講師博文 > 堆和棧的區(qū)別

堆和棧的區(qū)別 時(shí)間:2018-08-09      來源:未知

對(duì)于編程初學(xué)者來說會(huì)接觸到一些難以理解的名稱,比如堆(heap)、棧(stack)、堆棧(stack)等。初學(xué)開發(fā)過程中往往讓人混淆不清。今天我們來談?wù)劧押蜅5木唧w區(qū)別,來幫助初學(xué)者理清思路。

堆和棧的區(qū)別一直都是永恒的話題,為此我也查了很多的資料,以防自己的理解錯(cuò)誤,而給他人造成理解偏差。

先從簡(jiǎn)單的一個(gè)例子引出堆和棧:

void function(){

int *p = (int *)malloc(10*sizeof(int));

}

這是C語言開發(fā)學(xué)習(xí)過程中,必不可免要學(xué)習(xí)的知識(shí),動(dòng)態(tài)分配一塊空間,空間在堆區(qū)大小是40字節(jié)(32位系統(tǒng)中)。而定義的指針變量p是局部變量(在棧區(qū)中 占用4字節(jié)空間),用來存放剛剛前面動(dòng)態(tài)分配的空間的首地址。可以看出,在這一句代碼中同時(shí)包含了棧和堆,如圖1所示。 

圖1堆和棧

我們從以下幾個(gè)方面比較一下堆和棧:

(1)存儲(chǔ)內(nèi)容不同

棧:在函數(shù)調(diào)用時(shí),棧中存放的是函數(shù)中(底下是函數(shù)調(diào)用后的下一條指令)各個(gè)參數(shù)(局部變量)。

堆:一般是在堆的頭部用一個(gè)字節(jié)存放堆的大小。堆中的具體內(nèi)容有程序員安排。

(2)管理方式上不同

棧:由系統(tǒng)自動(dòng)分配空間,同時(shí)系統(tǒng)自動(dòng)釋放空間。 例如,聲明在函數(shù)中一個(gè)局部變量 int b; 系統(tǒng)自動(dòng)在棧中為b開辟空間,當(dāng)對(duì)應(yīng)的生存周期結(jié)束后棧空間自動(dòng)釋放。

堆:需要程序員手動(dòng)申請(qǐng)并且手動(dòng)釋放,并指明大小,在C語言中malloc函數(shù)申請(qǐng),釋放free函數(shù),在C++中 new和delete實(shí)現(xiàn)。

(3)空間大小不同

棧:獲取空間較小。在Windows下,一般大小是1M或2M,當(dāng)剩余棧空間不足時(shí),分配失敗overflow。

堆:獲得空間根據(jù)系統(tǒng)的有效虛擬內(nèi)存有關(guān),比較靈活,比較大。

(4)能否產(chǎn)生碎片不同

棧:不會(huì)產(chǎn)生碎片,空間連續(xù)。

堆:采用的是鏈表的存儲(chǔ)方式,會(huì)產(chǎn)生碎片。

(5)生長(zhǎng)方向不同

棧: 向低地址擴(kuò)展的數(shù)據(jù)結(jié)構(gòu),是一塊連續(xù)的內(nèi)存的區(qū)域。

堆: 向高地址擴(kuò)展的數(shù)據(jù)結(jié)構(gòu),是不連續(xù)的內(nèi)存區(qū)域。這是由于系統(tǒng)是用鏈表來存儲(chǔ)的空閑內(nèi)存地址的,自然是不連續(xù)的,而鏈表的遍歷方向是由低地址向高地址。

(6)分配方式不同

棧:有2種分配方式:靜態(tài)分配和動(dòng)態(tài)分配,靜態(tài)由編譯器完成,例如局部變量;動(dòng)態(tài)由alloca函數(shù)實(shí)現(xiàn),并且編譯器會(huì)進(jìn)行釋放。

堆: 都是動(dòng)態(tài)分配的,沒有靜態(tài)分配的堆。

(7)分配效率不同

棧:由系統(tǒng)自動(dòng)分配,速度較快。但程序員是無法控制的。

堆:由new分配的內(nèi)存,一般速度比較慢,而且容易產(chǎn)生內(nèi)存碎片,不過用起來方便。

以上是棧和堆幾個(gè)方面的不同,希望通過上面的資料可以幫助初學(xué)者分清堆和棧。

上一篇:新ARM處理器架構(gòu)

下一篇:分頻器設(shè)計(jì)原理淺析

熱點(diǎn)文章推薦
華清學(xué)員就業(yè)榜單
高薪學(xué)員經(jīng)驗(yàn)分享
熱點(diǎn)新聞推薦
前臺(tái)專線:010-82525158 企業(yè)培訓(xùn)洽談專線:010-82525379 院校合作洽談專線:010-82525379 Copyright © 2004-2022 北京華清遠(yuǎn)見科技集團(tuán)有限公司 版權(quán)所有 ,京ICP備16055225號(hào)-5京公海網(wǎng)安備11010802025203號(hào)

回到頂部

主站蜘蛛池模板: 祈今朝剧情介绍| 飞头魔女| 查理和劳拉| 凤凰卫视节目表| 学生基本情况分析| 啊啊用力啊| 会议议程模板| 王李| 天地姻缘七仙女演员表| 玉匣记白话全书| 爱神的诱惑电影| 2003年黄金价格多少一克| 果晓丹| 电影双面情人| 守株待兔评课| 色戒在线观看视频| 忍者2| 瑞斯·伊凡斯| 一个月经代表七个版本| 黄视频免费在线| 谜证在线观看免费完整版| 性欧洲| 创业史全文免费阅读| 安泽豪个人资料| 年会不能停免费观看完整版电影| 美国西部牛仔电影大全| 李顺大造屋| 三级大片在线观看| xiuren秀人网免费| 莫比乌斯电影在线观看全集高清 | 日韩成人av电影77777| 电视剧《河山》在线观看| 密使2之江都谍影 2013 于震| 南通紫琅音乐节| 廖凡主演的电视剧有哪些| 大胆艺术| 艳女十八式无删减版| kaylani lei| 六一儿童节小品剧本| 来5566看av激情电影使劲撸| 帕罗|