青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

非常典型的基礎(chǔ)知識(shí),轉(zhuǎn)自http://www.ruanyifeng.com/blog/2013/11/stack.html

學(xué)習(xí)編程的時(shí)候,經(jīng)常會(huì)看到stack這個(gè)詞,它的中文名字叫做"棧"。

理解這個(gè)概念,對(duì)于理解程序的運(yùn)行至關(guān)重要。容易混淆的是,這個(gè)詞其實(shí)有三種含義,適用于不同的場(chǎng)合,必須加以區(qū)分。

含義一:數(shù)據(jù)結(jié)構(gòu)

stack的第一種含義是一組數(shù)據(jù)的存放方式,特點(diǎn)為L(zhǎng)IFO,即后進(jìn)先出(Last in, first out)。

數(shù)據(jù)結(jié)構(gòu)stack

在這種數(shù)據(jù)結(jié)構(gòu)中,數(shù)據(jù)像積木那樣一層層堆起來,后面加入的數(shù)據(jù)就放在最上層。使用的時(shí)候,最上層的數(shù)據(jù)第一個(gè)被用掉,這就叫做"后進(jìn)先出"。

與這種結(jié)構(gòu)配套的,是一些特定的方法,主要為下面這些。

  • push:在最頂層加入數(shù)據(jù)。
  • pop:返回并移除最頂層的數(shù)據(jù)。
  • top:返回最頂層數(shù)據(jù)的值,但不移除它。
  • isempty:返回一個(gè)布爾值,表示當(dāng)前stack是否為空棧。

含義二:代碼運(yùn)行方式

stack的第二種含義是"調(diào)用棧"(call stack),表示函數(shù)或子例程像堆積木一樣存放,以實(shí)現(xiàn)層層調(diào)用。

下面以一段Java代碼為例(來源)。

 class Student{     int age;                   String name;            public Student(int Age, String Name)     {         this.age = Age;         setName(Name);     }     public void setName(String Name)     {         this.name = Name;     } }  public class Main{     public static void main(String[] args) {             Student s;                        s = new Student(23,"Jonh");     } }  

上面這段代碼運(yùn)行的時(shí)候,首先調(diào)用main方法,里面需要生成一個(gè)Student的實(shí)例,于是又調(diào)用Student構(gòu)造函數(shù)。在構(gòu)造函數(shù)中,又調(diào)用到setName方法。

調(diào)用棧

這三次調(diào)用像積木一樣堆起來,就叫做"調(diào)用棧"。程序運(yùn)行的時(shí)候,總是先完成最上層的調(diào)用,然后將它的值返回到下一層調(diào)用,直至完成整個(gè)調(diào)用棧,返回最后的結(jié)果。

含義三:內(nèi)存區(qū)域

stack的第三種含義是存放數(shù)據(jù)的一種內(nèi)存區(qū)域。程序運(yùn)行的時(shí)候,需要內(nèi)存空間存放數(shù)據(jù)。一般來說,系統(tǒng)會(huì)劃分出兩種不同的內(nèi)存空間:一種叫做stack(棧),另一種叫做heap(堆)。

內(nèi)存區(qū)域stack

它們的主要區(qū)別是:stack是有結(jié)構(gòu)的,每個(gè)區(qū)塊按照一定次序存放,可以明確知道每個(gè)區(qū)塊的大??;heap是沒有結(jié)構(gòu)的,數(shù)據(jù)可以任意存放。因此,stack的尋址速度要快于heap。

內(nèi)存區(qū)域heap

其他的區(qū)別還有,一般來說,每個(gè)線程分配一個(gè)stack,每個(gè)進(jìn)程分配一個(gè)heap,也就是說,stack是線程獨(dú)占的,heap是線程共用的。此外,stack創(chuàng)建的時(shí)候,大小是確定的,數(shù)據(jù)超過這個(gè)大小,就發(fā)生stack overflow錯(cuò)誤,而heap的大小是不確定的,需要的話可以不斷增加。

根據(jù)上面這些區(qū)別,數(shù)據(jù)存放的規(guī)則是:只要是局部的、占用空間確定的數(shù)據(jù),一般都存放在stack里面,否則就放在heap里面。請(qǐng)看下面這段代碼(來源)。

 public void Method1() {     int i=4;      int y=2;      class1 cls1 = new class1(); }  

上面代碼的Method1方法,共包含了三個(gè)變量:i, y 和 cls1。其中,i和y的值是整數(shù),內(nèi)存占用空間是確定的,而且是局部變量,只用在Method1區(qū)塊之內(nèi),不會(huì)用于區(qū)塊之外。cls1也是局部變量,但是類型為指針變量,指向一個(gè)對(duì)象的實(shí)例。指針變量占用的大小是確定的,但是對(duì)象實(shí)例以目前的信息無法確知所占用的內(nèi)存空間大小。

這三個(gè)變量和一個(gè)對(duì)象實(shí)例在內(nèi)存中的存放方式如下。

內(nèi)存空間stack實(shí)例

從上圖可以看到,i、y和cls1都存放在stack,因?yàn)樗鼈冋加脙?nèi)存空間都是確定的,而且本身也屬于局部變量。但是,cls1指向的對(duì)象實(shí)例存放在heap,因?yàn)樗拇笮〔淮_定。作為一條規(guī)則可以記住,所有的對(duì)象都存放在heap。

接下來的問題是,當(dāng)Method1方法運(yùn)行結(jié)束,會(huì)發(fā)生什么事?

回答是整個(gè)stack被清空,i、y和cls1這三個(gè)變量消失,因?yàn)樗鼈兪蔷植孔兞?,區(qū)塊一旦運(yùn)行結(jié)束,就沒必要再存在了。而heap之中的那個(gè)對(duì)象實(shí)例繼續(xù)存在,直到系統(tǒng)的垃圾清理機(jī)制(garbage collector)將這塊內(nèi)存回收。因此,一般來說,內(nèi)存泄漏都發(fā)生在heap,即某些內(nèi)存空間不再被使用了,卻因?yàn)榉N種原因,沒有被系統(tǒng)回收。

posted on 2013-12-07 11:41 Richard Wei 閱讀(1633) 評(píng)論(0)  編輯 收藏 引用 所屬分類: C++
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            亚洲欧美日韩电影| 亚洲国产婷婷香蕉久久久久久99| 亚洲欧美电影院| 亚洲人成网站777色婷婷| 欧美国产免费| 亚洲二区在线| 99re66热这里只有精品3直播| 亚洲日本va在线观看| 这里只有精品电影| 欧美在线3区| 久久最新视频| 欧美日韩亚洲系列| 国产小视频国产精品| 韩国av一区二区三区四区| 亚洲国产精品va在线看黑人| 亚洲伦伦在线| 欧美一区高清| 亚洲电影在线| 香蕉亚洲视频| 欧美日本三区| 国精品一区二区| 亚洲少妇中出一区| 久久久www| 日韩亚洲不卡在线| 久久久国产精品亚洲一区 | 午夜精品av| 久久在线视频在线| 亚洲作爱视频| 蜜桃av一区二区| 国产精品影音先锋| 亚洲黄色免费| 久久久国产精品一区二区三区| 亚洲高清中文字幕| 欧美一区中文字幕| 国产精品成人aaaaa网站 | 欧美日韩精品免费在线观看视频| 国产精品婷婷| 一区二区三区鲁丝不卡| 欧美成人xxx| 久久aⅴ国产欧美74aaa| 欧美色视频一区| 亚洲免费观看高清在线观看| 久久国产手机看片| 亚洲午夜精品国产| 欧美日韩免费观看一区三区 | 久久精品国产一区二区三| 欧美视频一区在线| 99成人精品| 亚洲国产精品日韩| 免费观看成人网| 在线观看亚洲视频| 久久亚洲精品一区二区| 欧美亚洲日本网站| 国产手机视频一区二区| 欧美一级大片在线观看| 亚洲一区www| 国产精品劲爆视频| 亚洲免费在线视频| 亚洲一区二区三区精品在线 | 亚洲国产精品第一区二区| 久久久久99| 久久亚洲欧美| 亚洲欧洲一区二区在线播放| 欧美.www| 欧美激情aⅴ一区二区三区| 亚洲人午夜精品| 91久久久亚洲精品| 欧美日韩一区二区三| 亚洲一区欧美一区| 亚洲一区精品电影| 国产色爱av资源综合区| 久久一区欧美| 欧美高清视频一二三区| 中文在线资源观看视频网站免费不卡| 日韩一二三区视频| 国产精品日韩在线| 免费成人av资源网| 欧美激情网友自拍| 午夜精品福利视频| 欧美一区午夜精品| 亚洲国产午夜| 国产精品99久久久久久www| 国产欧美1区2区3区| 老司机成人网| 欧美日韩福利| 久久综合五月天婷婷伊人| 欧美1区2区| 午夜视频在线观看一区二区三区| 久久不射电影网| 一本色道久久综合亚洲精品高清| 亚洲视频高清| 亚洲综合成人在线| 久久er精品视频| 日韩天堂在线视频| 亚洲自拍啪啪| 亚洲国产欧美不卡在线观看| 亚洲精品乱码久久久久久蜜桃91 | 亚洲一区激情| 91久久精品国产91久久| 亚洲一区二区免费视频| 在线观看成人av| 亚洲天堂成人在线观看| 亚洲国产欧美在线人成| 亚洲欧美欧美一区二区三区| 亚洲激情图片小说视频| 午夜亚洲影视| 亚洲视频二区| 欧美国产日韩xxxxx| 久久一二三国产| 国产精品日韩精品欧美在线| 亚洲高清资源| 在线电影欧美日韩一区二区私密| 一本色道久久88综合日韩精品 | 亚洲国产美女精品久久久久∴| 亚洲欧美久久久| 亚洲天堂av在线免费| 免费不卡中文字幕视频| 久久午夜羞羞影院免费观看| 国产精品美女主播| 亚洲久久一区二区| 91久久线看在观草草青青| 欧美在线资源| 欧美中在线观看| 国产精品普通话对白| 日韩午夜电影av| 日韩视频―中文字幕| 男人的天堂亚洲| 欧美国产亚洲另类动漫| 伊人精品视频| 久久久精品午夜少妇| 久久久久综合| 韩国v欧美v日本v亚洲v| 久久国产日韩| 久久女同精品一区二区| 国产一区二区日韩精品| 亚洲欧美日韩国产中文| 欧美亚洲系列| 国产精自产拍久久久久久| 亚洲一区二区三区午夜| 性感少妇一区| 国产亚洲欧美在线| 欧美一区二区视频97| 久久夜色精品国产亚洲aⅴ| 黄色小说综合网站| 老司机精品视频一区二区三区| 美女诱惑一区| 亚洲人成在线观看| 欧美日本三区| 亚洲午夜精品一区二区三区他趣 | 日韩一二三在线视频播| 欧美国产综合视频| 一本久久a久久精品亚洲| 一区二区三区鲁丝不卡| 亚洲美女淫视频| 欧美精品一区二区三区蜜桃 | 亚洲一级黄色| 国产精品一卡二| 羞羞色国产精品| 欧美电影打屁股sp| 在线亚洲国产精品网站| 国产精品成人在线| 欧美伊人久久久久久午夜久久久久 | 亚洲免费观看| 久久国产精品久久久久久| 黄色综合网站| 欧美日韩精品一区二区三区四区 | 欧美日本高清视频| 亚洲综合视频在线| 欧美成人一二三| 亚洲影院免费观看| 红桃视频国产一区| 欧美日韩国产精品| 欧美呦呦网站| 一区二区三区黄色| 蜜桃av噜噜一区二区三区| 亚洲午夜激情免费视频| 精品二区视频| 国产精品国产三级国产专播精品人| 久久国内精品自在自线400部| 亚洲国产一区二区三区在线播| 午夜日韩激情| 一区二区三区视频在线| 黄色亚洲精品| 国产精品成人一区二区网站软件| 久久精品人人做人人爽电影蜜月 | 免费观看成人网| 亚洲视频免费在线| 欧美激情精品久久久久久蜜臀 | 9国产精品视频| 久久中文久久字幕| 亚洲在线第一页| 亚洲三级影片| 国内精品国产成人| 国产精品久久久久久av下载红粉| 蜜桃av综合| 久久激情网站| 欧美在线看片| 亚洲综合视频一区| 亚洲视频图片小说| 亚洲精品乱码久久久久|