託管程式碼和非託管程式碼
託管程式碼:由公共語言執行庫環境(而不是直接由作業系統)執行的程式碼。託管程式碼應用程式可以獲得公共語言執行庫服務,例如自動垃圾回收、執行庫型別檢查和安全支援等。這些服務幫助提供獨立於平臺和語言的、統一的託管程式碼應用程式行為。
非託管程式碼:在公共語言執行庫環境的外部,由作業系統直接執行的程式碼。非託管程式碼必須提供自己的垃圾回收、型別檢查、安全支援等服務,它與託管程式碼不同,後者從公共語言執行庫中獲得這些服務,而非託管程式碼是在執行庫之外執行的程式碼。例如COM 元件、ActiveX 介面和 Win32 API 函式都是非託管程式碼的示例。
區別:
1、託管程式碼是一種中間語言,執行在CLR上;
非託管程式碼被編譯為機器碼,執行在機器上。
2、託管程式碼獨立於平臺和語言,能更好的實現不同語言平臺之間的相容;
非託管程式碼依賴於平臺和語言。
3、託管程式碼可享受CLR提供的服務(如安全檢測、垃圾回收等),不需要自己完成這些操作;
非託管程式碼需要自己提供安全檢測、垃圾回收等操作。
託管程式碼就意味著託管資料?答案是否定的。
對於Visual Basic和C#來說,生活是簡單的,因為你沒有其它選擇。當你在那些語言裡面宣告一個類,那麼這個類的例項會在託管堆中被建立,垃圾收集器(GC)會幫我們管理這些物件的回收
這就是非託管型別:
class Foo
{
private:
int x;
public:
Foo(): x(0){}
Foo(int xx): x(xx) {}
};
這就是託管型別
__gc class Bar
{
private:
int x;
public:
Bar(): x(0){}
Bar(int xx): x(xx) {}
};
他們唯一的區別就是類Bar的定義中有__gc關鍵字。這個關鍵字會給程式碼帶來巨大的區別。