.NET程序編譯和運行


  一次面試的時候遇到的一道題目,簡要說明.NET的編譯過程,在網上看了很多資料,簡單總結如下:

  1、一般的編譯過程

  通常高級語言的程序編譯過程是:首先寫好的程序是源代碼,然后編譯器編譯為本地機器語言,最后在本地操作系統運行。

  

  2、.NET程序的編譯與之類似:首先編寫好的源代碼,然后編譯為微軟中間語言代碼,運行的時候即時編譯為本地機器語言,同時.NET代碼運行時有一個CLR(運行時)環境來管理程序;

  

  

  MSIL  

  采用某種熟悉的語言編寫完畢的.NET源程序被.NET Framework中該語言的編譯器編譯成PE(Portable Executable,可移植可執行)文件,這個以.EXE或者.DLL為擴展名的文件是與計算機操作系統和硬件環境無關的中間語言代碼文件,稱為MSIL(MS Intermediate Language)代碼文件。PE文件主要包括兩部分,IL代碼和元數據。元數據是描述PE文件內容的含義的數據。

  JIT

  當在某個具體的計算機上要執行編譯后的PE文件時,.NET Framework調用“Just-In-Time”(即時)編譯器,在.NET Framework類庫的支持下,結合具體的操作系統和硬件環境,編譯成最終的可執行代碼。

  .NET Framework  

  在每台計算機上安裝.NET Framework后,一次編寫的.NET應用程序就可以跨操作系統平台和硬件環境執行。.NET中實現這一功能的原理和Java差不多,.NET Framework的作用就好比是Java的虛擬機。

  .NET Framework中提供了兩個編譯器。一個編譯器是每門程序語言的編譯器,這個編譯器編譯后的代碼只是與硬件環境無關的中間代碼MSIL。每台計算機上安裝的“Just-In-Time”編譯器最后完成與具體的硬件環境有關的可執行代碼的編譯。

  由此引出的兩個概念是:.NET Framework跨平台和跨語言兩大主要特征

  1、跨平台  

    在每台計算機上安裝.NET Framework后,我們編寫的.Net源程序就能被編譯成與操作系統和硬件無關的中間語言文件(EXE或DLL),程序員在編寫.NET程序時,無論采用什么樣的平台進行開發,最后都可以在.NET Framework的支持下移植到其他不同的平台上。硬是要與JAVA比較的話,如果把.NET Framework理解為Java虛擬機的功能,那么MSIL文件就好比是Java的字節碼文件。

  2、跨語言  

    .NET Framework中設計了一個通用語言系統(Common Language System,CLS),定義了很多標准的數據類型,.NET Framework支持的所有高級語言都必須同時支持該系統對數據類型的定義。

    在編譯成MSIL代碼的同時,各種高級語言自身的數據類型都被轉換成了CLS系統中的標准數據類型,比如,VB.NET中定義的Integer數據類型被轉換成了System.Int32數據類型,C#中的int類型也被轉換成了System.Int32數據類型。這樣不同語言的變量就可以相互交換信息了,這就是.NET Framework支持混合語言編程的基本原理。

    從直觀來看,工具Microsoft Visual Studio2010中提供多種編程語言可供選擇,如C#、C++、F#、VB,據說目前.Net已經能支持20多種編程語言的托管和編譯。

                                                    注:部分內容來自網絡


免責聲明!

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



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