<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      [你必須知道的.NET]第十八回:對象創建始末(上)

      博客園CLR基礎研究團隊|CLR團隊精品系列|Anytao技術博客

       

      [你必須知道的.NET]第十八回:對象創建始末(上)

      發布日期:2007.12.3 作者:Anytao
      ? 2007 Anytao.com ,原創作品,轉貼請注明作者和出處。

       

      本文將介紹以下內容:

      • 對象的創建過程
      • 內存分配分析
      • 內存布局研究

         

      1. 引言

      了解.NET的內存管理機制,首先應該從內存分配開始,也就是對象的創建環節。對象的創建,是個復雜的過程,主要包括內存分配和初始化兩個環節。例如,對象的創建過程可以表示為:

                  FileStream fs = new FileStream(@"C:"temp.txt", FileMode.Create);

      通過new關鍵字操作,即完成了對FileStream類型對象的創建過程,這一看似簡單的操作背后,卻經歷著相當復雜的過程和周折。

      本篇全文,正是對這一操作背后過程的詳細討論,從中了解.NET的內存分配是如何實現的?

      2. 內存分配

      關于內存的分配,首先應該了解分配在哪里的問題。CLR管理內存的區域,主要有三塊,分別為:

      ·       線程的堆棧,用于分配值類型實例。堆棧主要由操作系統管理,而不受垃圾收集器的控制,當值類型實例所在方法結束時,其存儲單位自動釋放。棧的執行效率高,但存儲容量有限。

      ·       GC堆,用于分配小對象實例。如果引用類型對象的實例大小小于85000字節,實例將被分配在GC堆上,當有內存分配或者回收時,垃圾收集器可能會對GC堆進行壓縮,詳情見后文講述。

      ·       LOHLarge Object Heap)堆,用于分配大對象實例。如果引用類型對象的實例大小不小于85000字節時,該實例將被分配到LOH堆上,而LOH堆不會被壓縮,而且只在完全GC回收時被回收。

      本文討論的重點是.NET的內存分配機制,因此下文將不加說明的以GC堆上的分配為例來展開。關于值類型和引用類型的論述,請參見[第八回:品味類型---值類型與引用類型(上)-內存有理]

      了解了內存分配的區域,接著我們看看有哪些操作將導致對象創建和內存分配的發生,關于實例創建有多個IL指令解析,主要包括:

      ·       newobj,用于創建引用類型對象。

      ·       ldstr,用于創建string類型對象。

      ·       newarr,用于分配新的數組對象。

      ·       box,在值類型轉換為引用類型對象時,將值類型字段拷貝到托管堆上發生的內存分配。

          在上述論述的基礎上,下面從堆棧的內存分配和托管堆的內存分配兩個方面來分別論述.NET的內存分配機制。

      2.1 堆棧的內存分配機制

      對于值類型來說,一般創建在線程的堆棧上。但并非所有的值類型都創建在線程的堆棧上,例如作為類的字段時,值類型作為實例成員的一部分也被創建在托管堆上;裝箱發生時,值類型字段也會拷貝在托管堆上。

      對于分配在堆棧上的局部變量來說,操作系統維護著一個堆棧指針來指向下一個自由空間的地址,并且堆棧的內存地址是由高位到低位向下填充。以下例而言:

              public static void Main()
              {
                  
      int x = 100;
                  
      char c = 'A';
              }

         假設線程棧的初始化地址為50000,因此堆棧指針首先指向50000地址空間。代碼由入口函數Main開始執行,首先進入作用域的是整型局部變量x,它將在棧上分配4Byte的內存空間,因此堆棧指針向下移動4個字節,則值100將保存在49997~50000單位,而堆棧指針表示的下一個自由空間地址為49996,如圖所示:

      接著進入下一行代碼,將為字符型變量c分配2Byte的內存空間,堆棧指針向下移動2個字節至49994單位,值’A’會保存在49995~49996單位,地址的分配如圖:

      最后,執行到Main方法的右括號,方法體執行結束,變量xc的作用域也隨之結束,需要刪除變量xc在堆棧內存中的值,其釋放過程和分配過程剛好相反:首先刪除c的內存,堆棧指針向上遞增2個字節,然后刪除x的內存,堆棧指針繼續向上遞增4個字節,程序執行結束,此時的內存狀況為:

          其他較復雜的分配過程,可能在作用域和分配大小上有所不同,但是基本過程大同小異。棧上的內存分配,效率較高,但是內存容量不大,同時變量的生存周期隨著方法的結束而消亡。

      未完待續:托管堆的內存分配機制必要的補充說明,近期發布,敬請關注。 

       

      參考文獻

      (USA)Joe Duffy, Professinal .NET Framework 2.0

      (USA)Don Box, Essiential .NET

      (MSDN)Hanu Kommalapati and Tom Christian, Drill Into .NET Framework Internals to See How the CLR Creates Runtime Objects, http://msdn.microsoft.com/msdnmag/issues/05/05/JITCompiler/default.aspx 
       

      溫故知新

      [開篇有益]
      [第一回:恩怨情仇:is和as]
      [第二回:對抽象編程:接口和抽象類]
      [第三回:歷史糾葛:特性和屬性]
      [第四回:后來居上:class和struct]
      [第五回:深入淺出關鍵字---把new說透]
      [第六回:深入淺出關鍵字---base和this]
      [第七回:品味類型---從通用類型系統開始]
      [第八回:品味類型---值類型與引用類型(上)-內存有理]
      [第九回:品味類型---值類型與引用類型(中)-規則無邊]
      [第十回:品味類型---值類型與引用類型(下)-應用征途]
      [第十一回:參數之惑---傳遞的藝術(上)]
      [第十二回:參數之惑---傳遞的藝術(下)]
      [第十三回:從Hello, world開始認識IL]
      [第十四回:認識IL代碼---從開始到現在]
      [第十五回:繼承本質論]
      [第十六回:深入淺出關鍵字---using全接觸]
      [第十七回:貌合神離:覆寫和重載]

      ? 2007 Anytao.com

      原創作品,轉貼請注明作者和出處,留此信息。

      本文以“現狀”提供且沒有任何擔保,同時也沒有授予任何權利。
      This posting is provided "AS IS" with no warranties, and confers no rights.

      posted @ 2007-12-03 02:31  Anytao  閱讀(13832)  評論(70)    收藏  舉報
      主站蜘蛛池模板: 丰满少妇被猛烈进入av久久| 国产亚洲精品久久久久秋霞| 亚洲精品无amm毛片| 日韩中文字幕人妻精品| 人妻中出无码一区二区三区| 久久国内精品一区二区三区| 国产欧美日韩亚洲一区二区三区| 亚洲国产一区二区三区| a4yy私人毛片| 国产精品国三级国产av| 少妇伦子伦精品无吗| 日日碰狠狠添天天爽五月婷| 人妻蜜臀久久av不卡| 国产露脸无套对白在线播放| 男人和女人做爽爽免费视频| 亚洲AV午夜成人无码电影| 无翼乌口工全彩无遮挡h全彩| 国产69精品久久久久久| 日日噜噜夜夜狠狠视频| 国产精品中文av专线| 亚洲综合国产成人丁香五| 久久久无码精品国产一区| 亚洲熟女精品一区二区| 国产成人精品一区二区三| 日韩精品av一区二区三区| 亚洲sm另类一区二区三区| 日本午夜精品一区二区三区电影 | 人人爽人人爽人人片a免费| 不卡乱辈伦在线看中文字幕| 国产精品久久久久久福利| 少妇撒尿一区二区在线视频| 国产线播放免费人成视频播放| 老色鬼在线精品视频在线观看| 亚洲最大成人av在线天堂网| 国产av一区二区麻豆熟女| 男女性高爱潮免费网站| 国产精品久久久久aaaa| 国产区一区二区现看视频| 中文字幕久久久久人妻中出| 国产精品国产三级国快看| 亚洲欧美日韩综合一区在线|