




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、 6個(gè)重要的.NET概念:棧,堆,值類型,引用類型,裝箱,拆箱 引言本篇文章主要介紹.NET中6個(gè)重要的概念:棧,堆,值類型,引用類型,裝箱,拆箱。文章開始介紹當(dāng)你聲明一個(gè)變量時(shí),編譯器內(nèi)部發(fā)生了什么,然后介紹兩個(gè)重要的概念:棧和堆;最后介紹值類型和引用類型,并說(shuō)明一些有關(guān)它們的重要原理。最后通過(guò)一個(gè)簡(jiǎn)單的例如代碼說(shuō)明裝箱拆箱帶來(lái)的性能損耗。 聲明變量的內(nèi)部機(jī)制在.NET程序中,當(dāng)你聲明一個(gè)變量,將在內(nèi)存中分配一塊內(nèi)存。這塊內(nèi)存分為三局部:1,變量名;2,變量類型;3,變量值。以下圖揭示了聲明一個(gè)變量時(shí)的內(nèi)部機(jī)制,其中分配的內(nèi)存類型依據(jù)你的變量類型。.NET中有兩種類型的內(nèi)存:棧內(nèi)存
2、和堆內(nèi)存。在接下來(lái)的內(nèi)容中,我們會(huì)了解到這兩種類型的詳細(xì)內(nèi)容。棧和堆為了明白什么是棧和堆,先讓我們看下下面例如代碼的內(nèi)部機(jī)制:1public void Method1( 2/ Line 1 3int i=4; 4/ Line 2 5int y=2; 6/Line 3 7class1 cls1 = new class1(; 8這里一共有3行代碼。讓我們一下逐行看一下它們是如何執(zhí)行的: 第1行:當(dāng)這行代碼執(zhí)行時(shí),編譯器為它分配一小塊棧內(nèi)存。運(yùn)行時(shí)棧負(fù)責(zé)提供程序所需的內(nèi)存;第2行:程序繼續(xù)執(zhí)行。如同名字一樣,棧在第一塊內(nèi)存的頂局部配了一塊內(nèi)存。你也可以認(rèn)為是模塊或零件一塊一塊疊起來(lái);內(nèi)存的
3、分配與釋放遵循后進(jìn)先出(后進(jìn)先出邏輯,換句話說(shuō),內(nèi)存只能在例如中i內(nèi)存塊的頂局部配或釋放。第3行:在第3行,我們創(chuàng)立了一個(gè)對(duì)象。當(dāng)該行執(zhí)行時(shí),編譯器在站上創(chuàng)立了一個(gè)指針,真實(shí)的對(duì)象存儲(chǔ)在另一種叫“堆的內(nèi)存中。"堆"并不跟蹤運(yùn)行內(nèi)存,它更像一堆隨時(shí)可以訪問(wèn)的對(duì)象。堆用于動(dòng)態(tài)分配內(nèi)存。這里需要著重說(shuō)明的是引用指針是分配在棧上。聲明Class1 cls1時(shí)并不會(huì)給Class1的實(shí)例分配內(nèi)存,而是分配一個(gè)棧變量cls1并設(shè)置為null,然后把它指向“堆。退出方法:當(dāng)方法退出時(shí),它釋放了棧上所有內(nèi)存變量。換句話說(shuō),棧上所有的"Int"變量都依據(jù)后進(jìn)先出的邏輯被釋放
4、掉了。要注意,此時(shí)不會(huì)釋放堆內(nèi)存,這種內(nèi)存稍后會(huì)被“垃圾收集器釋放?,F(xiàn)在可能會(huì)有很多朋友奇怪為什么要分配2種內(nèi)存,而不是僅用一種內(nèi)存。如果仔細(xì)觀察,你會(huì)發(fā)現(xiàn)根本類型并不復(fù)雜,他們值包含簡(jiǎn)單的值,如i=0。對(duì)象數(shù)據(jù)類型很復(fù)雜,它們會(huì)引用其它對(duì)象或根本類型。換句話說(shuō),它要保持其它多種多樣的引用,而每種類型必須存在內(nèi)存中。對(duì)象類型需要?jiǎng)討B(tài)內(nèi)存而根本類型需要靜態(tài)內(nèi)存。如果需要分配動(dòng)態(tài)內(nèi)存,那么就分配到堆上;反之在棧上。值類型與引用類型現(xiàn)在我們明白了棧和堆,接下來(lái)看值類型和引用類型。值類型的數(shù)據(jù)和內(nèi)存在同一個(gè)位置,而引用類型是一個(gè)指向內(nèi)存的指針。下面例如是一個(gè)整形數(shù)據(jù)類型變量i被賦給另一個(gè)整形數(shù)據(jù)類型變
5、量j。它們的內(nèi)存值都分配在棧上。當(dāng)我們把一個(gè)int值分配給另外一個(gè)int值時(shí),需要?jiǎng)?chuàng)立一個(gè)完全不同的拷貝。換句話說(shuō),你可以改變其中任何一個(gè)而不會(huì)影響另外一個(gè)。這種數(shù)據(jù)類型被稱為值類型。當(dāng)我們創(chuàng)立一個(gè)對(duì)象,并把一個(gè)對(duì)象賦給另外一個(gè)對(duì)象時(shí),它們的指針指向相同的內(nèi)存(如以下圖,當(dāng)我們把obj賦給obj1時(shí),它們指向相同的內(nèi)存。換句話說(shuō),我們改變其中一個(gè),會(huì)影響到另外一個(gè),這種類型稱為引用類型。那么那種類型是值類型和引用類型呢?在.NET中,依據(jù)數(shù)據(jù)類型,變量被分配到堆或棧上?!皊tring和"Object"是引用類型,其他根本類型被分配到棧上,是值類型,如以下圖:裝箱與拆箱通過(guò)上面學(xué)習(xí),我們學(xué)到了很多有用的東西,其中最有用的是明白了當(dāng)把數(shù)據(jù)從棧移動(dòng)到堆上時(shí)會(huì)有性能損失。如以下圖實(shí)例,當(dāng)我們把一個(gè)值類型裝箱為引用類型時(shí),數(shù)據(jù)從棧移動(dòng)到堆上。反之,數(shù)據(jù)從堆移動(dòng)到棧上。這種在堆和棧之間的移動(dòng)帶來(lái)了性能的損失。數(shù)據(jù)從值類型轉(zhuǎn)變?yōu)橐妙愋偷倪^(guò)程稱為“裝箱,反之為“拆箱。如果編譯上面的代碼,在ILDASM中看IL代碼就會(huì)發(fā)下如何進(jìn)行裝箱拆箱操作的,如下:裝箱拆箱的性能影響為了揭示裝箱拆箱如何影響性能,我們把下面代碼運(yùn)行10000次。一個(gè)函數(shù)有裝箱操作,另一個(gè)只有簡(jiǎn)單代碼。
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 第17課 明朝的滅亡和清朝的建立 教案2024-2025學(xué)年七年級(jí)歷史下冊(cè)新課標(biāo)
- “房地產(chǎn)主要的宣傳渠道及各種渠道效果”的調(diào)研調(diào)查問(wèn)卷
- 湖北省武漢市江岸區(qū)2024-2025學(xué)年高三(上)期末生物試卷(含解析)
- 北京市朝陽(yáng)區(qū)北京中學(xué)2023-2024學(xué)年高二下學(xué)期期中考試語(yǔ)文試題
- 樓頂廣告施工方案
- 隧道集水坑施工方案
- 箱梁混凝土施工方案
- 2025年8d考核試題及答案
- 6年級(jí)數(shù)學(xué)手抄報(bào)題材
- 玻璃厚度幕墻施工方案
- 公路養(yǎng)護(hù)安全作業(yè)規(guī)程完整
- 《自己之歌》課件
- 2023年全國(guó)初中數(shù)學(xué)聯(lián)合競(jìng)賽試題及參考答案
- GB/T 8897.1-2003原電池第1部分:總則
- 2023年新疆生產(chǎn)建設(shè)兵團(tuán)興新職業(yè)技術(shù)學(xué)院高職單招(語(yǔ)文)試題庫(kù)含答案解析
- 學(xué)雷鋒精神學(xué)習(xí)雷鋒日主題班會(huì)課件
- 劍橋少兒英語(yǔ)第一冊(cè)-Unit5-our-pets課件
- 《馬克思主義政治經(jīng)濟(jì)學(xué)概論》課程教學(xué)大綱
- ISO22000培訓(xùn)知識(shí)基礎(chǔ)課件
- 倉(cāng)庫(kù)管理基礎(chǔ)知識(shí)培訓(xùn)模板課件
- 孤獨(dú)癥康復(fù)教育人員上崗培訓(xùn)練習(xí)題庫(kù)及答案
評(píng)論
0/150
提交評(píng)論