二:認識Managed 程式碼

來源:互聯網
上載者:User

     前面已經學過了Managed 程式碼的概念,現在要學的是Managed 程式碼的組成。
在DonNet平台下,不管用何種程式設計語言,只要編譯器面向CLR就可以工作。但不同語言有不同的優勢,所以應該選最能表達自己意圖的語言。

  如,無論使用哪一種語言和編譯器,結果都是產生一個託管模組,託管模組是一個標準的32位Microsoft Windows可移植執行體(PE32)檔案,或者是一個標準的64位Microsoft Windows可移植執行體(PE32+)檔案,它主要由PE32或PE32+頭,CLR頭,中繼資料和中繼語言構成的,它需要CLR管理才能執行,所以就叫做託管模組。
什麼是PE檔案呢,PE 的意思就是 Portable Executable(可移植的執行體),就像上面一樣簡單的說就是Microsoft Windows可移植執行體檔案,這裡有它的結構組成的解釋http://www.cnblogs.com/ilove/archive/2008/04/15/1157228.html。而託管模組中的PE32或PE32+頭就是標準的Windows PE檔案頭,如果這個頭使用PE32格式,則檔案能在Windows的32位或64位版本上運行,如果是PE32+那就只能在64位上運行。
     CLR頭包含使這個模組成為一個託管模組的資訊(由CLR頭和公用程式來解釋),包含所要求的CLR版本,一些標誌,託管模組入口方法(Main方法)的MethodDef中繼資料標記,以及模組的中繼資料、資源、強式名稱、一些標誌以及其他不太重要的資料項目的大小和位置。
     中繼資料(metadata)是一系統特殊的資料表,主要有兩種類型的表,一種是用於描述原始碼中定義的類型和成員,一種是描述原始碼引用的類型。
     中繼語言,Intermediate Language,編譯器編譯編譯產生的代碼就叫做中繼語言,CLR將IL編譯成本地CPU指令。IL是基於堆棧的,這意味著它的所有指令都要將運算元壓入一個執行堆棧,結果從這個堆棧中彈出。由於IL沒有提供操作寄存器的指令,所以編譯器開發人員可以很容易的產生IL代碼。他們不必關心寄存器的管理問題,需要的IL指令也比較少,因為沒有專門用於操作寄存器的指令。IL指令還是"無類型"的,IL最大的優勢並不在於它是脫離了底層CPU的一種抽象,在於它提供應用程式的可靠性和安全性。
  Managed 程式碼與Unmanaged 程式碼的相互操作有以下幾點:
  (1)Managed 程式碼能調用DLL中的一個非託管函數
  (2)Managed 程式碼能夠使用一個現有的COM組件
  (3)Unmanaged 程式碼能夠使用一個託管類型

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.