一 javascript的記憶體配置

來源:互聯網
上載者:User

  瞭解javascript的人都知道資料的基本類型按大的分類有兩種:原始值和引用值

  在研習演算法的時候會過多的和記憶體打交道;理解棧和堆的定義是很重要的,演算法就是為了能夠獲得最大的效率

  任何語言都是如此,javascript也不例外;在javascript中,我在把變數類型分為原始類型和參考型別。原始類型是放在棧即記憶體中,而參考型別這是放在堆中。在ECMAscript中,也是這麼定義的。

  棧

  主要作用表現為一種資料結構,是只能在某一端插入和刪除的特殊線性表。它按照後進先出的原則儲存資料,先進入的資料被壓入棧底,最後的資料在棧頂,需要讀資料的時候從棧頂開始彈出資料(最後一個資料被第一個讀出來)。

  棧是允許在同一端進行插入和刪除操作的特殊線性表。允許進行插入和刪除操作的一端稱為棧頂(top),另一端為棧底(bottom);棧底固定,而棧頂浮動;棧中元素個數為零時稱為空白棧。插入一般稱為進棧(PUSH),刪除則稱為退棧(POP)。棧也稱為後進先出表。在這裡用數組進行類比棧的特性

  棧可以用來在函數調用的時候儲存斷點,做遞迴時要用到棧!

 

var arr=[];//建立一個數組類比棧arr.push("a");//壓入元素aarr.push("b");//壓入元素barr.pop();//彈出元素aarr.pop();//彈出元素barr.push("c");//壓入元素c

 

 圖譜解釋:

 

從可以看出棧有著先進後出的特性;在棧中的資料直接可以訪問,效率比較高

 

  堆:

  在程式中,堆用於動態分配和釋放程式所使用的對象。在以下情況中調用堆操作:

    1.事先不知道程式所需對象的數量和大小。

    2.對象太大,不適合使用堆棧分配器。

  堆使用運行期間分配給代碼和堆棧以外的部分記憶體。

  在javascript中,引用資料是放在堆中的,例如數組和對象,因為在javascript中,一切都是對象,對象可以進行擴充,放置在堆中可以進行不斷的擴充,如果放在記憶體中就會消耗大量資源。放置在堆中的資料的查詢效率比較低。這也是記憶體優於堆的好處,但是記憶體的儲存空間要比堆的小很多。

 

function Car(id,name,price){this.id=id;this.name=name;this.price=price;}var num=24;var str="car";var bol=false;var obj={};var arr=[1,2,3];var car=new Car(1,"benze",230000);

 

 圖譜解釋:

這樣很清楚的知道棧和堆的區別;原始類型的資料放在棧中,參考型別的資料放在堆中。參考型別的資料同C中的指標很類似,我們不能直接操作堆中的資料,我們通過一個指標來引用這些資料進行操作,看以看作是遠程操控。

    棧與堆的區別:

    1 效率的不同

      棧的效率比堆要高,棧中的資料直接可以使用,而對則需要通過引用來進行操作,即棧的速度比堆快

    2 空間儲存不同

                 堆的儲存空間要比棧大

           3 放置資料類型的不同

 

 

  

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.