c# 深入探索之CLR


概念:

CLR :

公共語言運行時(Common Language Runtime) 是一個可由多種編程語言使用的"運行時",它負責資源管理(內存分配和垃圾收集等),並保證應用和底層操作系統之間必要的分離。CLR的核心功能(內存管理、程序集加載、安全性、異常處理和線程同步)可由面向CLR的所有語言使用。

通俗一點說就是:不管是c# 、c++、 vb、f#、甚至是java等各編譯器面向CLR的語言,都可以借用CLR里已經實現的核心功能。

例如:CLR使用異常報告錯誤,因此,面向它的任何語言都能通過異常來報告錯誤;CLR允許創建線程,所以面向它的任何語言都能創建線程

 

托管模塊

用支持CLR的任何一種語言創建的源代碼文件,再經過相應的編譯器檢查語法和分析源代碼,編譯生成。

       是一個標准的32位的可移植執行體(PE32)文件或一個標准的64位可移植執行體(PE32+)文件,它們都需要CLR才能執行。下圖:是將源代碼編譯成托管模塊的過程

       

                                           

          托管模塊的組成:

 

                              

以上是關於托管模塊高大上版本的介紹,以下我再接地氣的以C#語言作為主角介紹以下

 

    程序員寫完一段優美的c#代碼后,會通過自帶的編譯器編譯,生成托管模塊,托管模塊在一個可移植的PE文件中(如 .exe 、.dll)

               PE文件里的托管模塊,你可以當做c#的一個類,類里有四個屬性,一個PE頭(介紹該文件的信息),一個CLR頭(描述這個對象的整體的一些信息,比如main入口),元數據(這個很關鍵,一種元數據表包含源代碼中定義的那些那些類型和成員的描述信息,另一種包含引用的類型和成員的描述信息),IL代碼(也很關鍵:就是你的源代碼被編譯后的代碼,又稱中間語言)。

    托管模塊的主要組成就是IL與元數據:  IL代碼有時候也叫托管代碼,因為CLR管理它的執行  元數據就是對這段c#源代碼的描述

    元數據有很多用途:其中有一條大家肯定曉得: Microsoft Visual Studio 用元數據幫助你寫代碼。“智能感知”(IntelliSense)技術會解析元數據,告訴你一個類型提供了那些方法、屬性、事件和字段。對於方法,還能告訴你需要的參數

 

 托管模塊可合並成為程序集

 

程序集(assembly)是一個抽象概念:

由一或者多個模塊/資源文件的邏輯性組合。程序集是重用、安全性以及版本控制的最小單元。在CLR世界中,程序集相當於“組件”。托管模塊合並程序集如下圖

                            

    該圖將 一些托管模塊 與 一些資源文件 交給一個工具處理,生成一個PE32(+)文件,這些托管模塊與資源文件合並到了一起,並多了一個清單(清單的作用類似於元數據對托管代碼的作用)。

  

  執行程序集

      程序集同時包含 元數據與IL。IL是與CPU不相關的代碼,不是機器語言,計算機無法運行,這個時候就需要強大的CLR了!

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM