托管和非托管是微軟.net framework框架中特有的概念,
.net framework主要包括兩部分:
1.CLR(Common Language Runtime)公共語言運行時,
2.BCL(Basic Class Library)基礎類別庫,
CLR提供服務:諸如記憶體管理,垃圾回收,執行緒管理等服務;BCL提供實作,
托管代碼:
運行在CLR下的代碼就是托管代碼,諸如C#、VB.NET 寫的代碼都會先編譯成MSIL(MS中間代碼),并運行在CLR的子集CLI(Common Language Infrastructure)中,最終根據不同的平臺使用JIT(just in Time)編譯成機器代碼,
與Java機制不同在于Java是經過一次編譯和一次解釋運行,C#是經過兩次編譯運行,
非托管代碼:
非托管的代碼也叫本地代碼(native),是由作業系統管理的,
高級語言撰寫的程式必須經過一定的步驟編譯為機器語言才能被機器理解和運行,
在標準的C/C++中,編譯程序是這樣的:
1.預處理,源代碼經過前處理器,對頭檔案和宏進行決議,
2.編譯,經過編譯器,生成匯編代碼,
3.匯編,經過匯編器,生成機器指令,
4.鏈接,經過鏈接,生成可執行程式,
這種編譯的特點是直接生成了機器碼,可以直接被機器識別和運行,無需任何中間運行環境,缺點是不同平臺能夠識別的機器碼不同,因此可執行程式的跨平臺能力差,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/264800.html
標籤:其他
上一篇:you-get
