麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 學院 > 開發設計 > 正文

圖解.NETStack和Heap的本質區別

2019-11-14 13:38:34
字體:
來源:轉載
供稿:網友

  現在越來越覺得對.NET基本概念的理解和掌握對于提升編程水平的重要性,先從.NET的 Stack(棧)和Heap(堆)說起,計算機的內存可以分為代碼塊內存,stack內存和heap內存。代碼塊內存是在加載程序時存放程序機器代碼的地方。Stack一般存放函數內的局部變量。而heap存放全局變量和類對象實例等。若只是聲明一個對象,則先在棧內存中為其分配地址空間,若再實例化它,則在堆內存中為其分配空間。

1 Stack VS Heap

  由于計算機的內存分配過程比較抽象,下面舉一個簡單的程序片段,來圖解和諧步驟對Stack和Heap內存的影響:

   下面的StackvsHeap類有一個Person類和Fun1方法,當調用Fun1方法時,當執行第一行代碼,即

int i=3;

  在.NET中,除了string、object、class、delegate和interface外,其他的類型為數值類型,一般(不是全部)存放在Stack內存中。此處int i=3是函數內的非靜態變量,而數值型為非引用類型,即會在Stack內存中分配一個區域來存放該變量的名和值。

當執行第二句語句,即

int j=i;

  .NET也會在Stack內存中分配一個區域來存放該變量的名和值。而且地址塊在i=3之上(LIFO)。

  當執行第三句,即

 Person p = new Person();

時,我們可以分為兩步來看:

  1)在Stack上分配一個Person類型的p引用變量(指向Heap上的地址);

  2) 在Heap上分配一個空間來存儲Person類的實例數據;

  具體的過程如下圖所示:

2 值類型和引用類型

 理解了上面的過程,現在理解值類型和引用類型的變量則更加容易:

 先看下面的圖:

 

  由于int j=i中是int類型,為值類型變量,則j=3為i=3的拷貝,因此,修改i不會修改j,修改j也不會修改i;

  而Person p2=p中Person為類,是引用類型,因此p2和p指向同一個heap地址塊,因此,修改p2的值會影響p的值。

 


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 国产免费中文字幕 | 九九热色 | 精品一区在线视频 | 福利在线免费 | 久久久久中文字幕 | 免费观看一区二区三区 | 欧美福利视频一区二区三区 | 日产精品久久久一区二区开放时间 | 91av大片| 一级黄色毛片播放 | 日韩黄色免费观看 | 欧美女人天堂 | 国产精品久久久久久久久久电影 | 日韩视频一区二区三区四区 | 九九热精| 欧美黄色一级带 | 国产在线精品一区二区三区 | 亚洲电影免费观看国语版 | 中文字幕欧美专区 | 蜜桃麻豆视频 | 国产精品成人久久 | 午夜视频在线观 | a视频在线看 | 舌头伸进添的我好爽高潮网站 | 国产精品久久久久久久成人午夜 | 特大黑人videos与另类娇小 | 毛片在线视频观看 | 91成人在线网站 | 老师你怎么会在这第2季出现 | 污视频在线免费播放 | 成人午夜激情视频 | 三级xxxx | 亚洲国产精久久久久久久 | 精品在线观看一区二区 | av黄色在线免费观看 | 法国极品成人h版 | 免费网站看毛片 | 国产毛片在线看 | 欧美精品一区二区三区在线播放 | 5xx免费看| 久久99综合久久爱伊人 |