日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網(wǎng)站首頁 編程語言 正文

值類型和引用類型的區(qū)別 I 數(shù)據(jù)結(jié)構(gòu)中的堆和棧和內(nèi)存中的堆和棧的區(qū)別

作者:Z_hongli 更新時間: 2022-11-14 編程語言

值類型和引用類型的區(qū)別 I 數(shù)據(jù)結(jié)構(gòu)中的堆和棧和內(nèi)存中的堆和棧的區(qū)別

  • 一、值類型和引用類型
  • 二、值類型和引用類型的區(qū)別
  • 三、數(shù)據(jù)結(jié)構(gòu)中的堆和棧和內(nèi)存中的堆和棧的區(qū)別
    • (一)數(shù)據(jù)結(jié)構(gòu)中的堆和棧
      • 1.棧:裝數(shù)據(jù)的桶或者箱子
      • 2.堆:一顆倒立的大樹
    • (二)內(nèi)存中的堆和棧

一、值類型和引用類型

類型 數(shù)據(jù)類型
值類型 Int float bool char struct enum
引用類型 string class interface delegate array

二、值類型和引用類型的區(qū)別

  1. 值類型存儲快,引用類型存儲慢
  2. 值類型表示實際的數(shù)據(jù),引用類型表示指向存儲在內(nèi)存中數(shù)據(jù)的指針和引用
  3. 值類型繼承自System.valueType,引用類型繼承自System.Object
  4. 值類型存儲在棧中,引用類型存儲在堆中
  5. 棧內(nèi)的內(nèi)存會自動釋放,堆中的內(nèi)存由.NET中的GC自動釋放

三、數(shù)據(jù)結(jié)構(gòu)中的堆和棧和內(nèi)存中的堆和棧的區(qū)別

(一)數(shù)據(jù)結(jié)構(gòu)中的堆和棧

堆和棧都是一種數(shù)據(jù)項按序排列的數(shù)據(jù)結(jié)構(gòu)

1.棧:裝數(shù)據(jù)的桶或者箱子

棧是一種具有后進先出的數(shù)據(jù)結(jié)構(gòu),也就是說后存放的先取,先存放的后取,這就類似于我們要在取放在箱子底部的東西,我們首先要移開壓在它上面的物體。

2.堆:一顆倒立的大樹

堆是一種經(jīng)過排序的樹形數(shù)據(jù)結(jié)構(gòu),每個節(jié)點都有一個值。通常我們所說的堆的數(shù)據(jù)結(jié)構(gòu)是指二叉樹。堆的特點是根節(jié)點的值最小(或最大),且根節(jié)點的兩個樹也是一個堆。由于堆的這個特性,常用來實現(xiàn)優(yōu)先隊列,堆的存取是隨意的,這就如同我們在圖書館的書架上取書,雖然書的擺放是有順序的,但是我們想取任意一本時不必像棧一樣,先取出前面所有的書,書架這種機制不同于箱子,我們可以直接取出我們想要的書。

(二)內(nèi)存中的堆和棧

內(nèi)存中的棧區(qū)處于相對較高的地址,以地址的增長方向為上的話,棧地址是向下增長的

棧中分配局部變量空間,堆區(qū)是向上增長的用于分配程序員申請的內(nèi)存空間。另外還有靜態(tài)區(qū)是分配靜態(tài)變量,全局變量空間的。只讀區(qū)是分配常量和程序代碼空間的;以及其他一些分區(qū)。

原文鏈接:https://blog.csdn.net/Z_hongli/article/details/127837494

欄目分類
最近更新