<form id="dlljd"></form>
        <address id="dlljd"><address id="dlljd"><listing id="dlljd"></listing></address></address>

        <em id="dlljd"><form id="dlljd"></form></em>

          <address id="dlljd"></address>
            <noframes id="dlljd">

              聯系我們 - 廣告服務 - 聯系電話:
              您的當前位置: > 關注 > > 正文

              天天時訊:什么是C++/CLI?什么是非托管代碼?

              來源:CSDN 時間:2023-01-31 13:37:09

              目錄

              什么是c++/cli?

              什么是托管代碼?什么是非托管代碼?


              (資料圖片僅供參考)

              托管代碼

              非托管代碼

              兩者區別

              c++/cli有什么用?

              什么是c++/cli?

              C++/CLI(CLI: Common Language Infrastructure)在計算機語言中是一門由微軟設計,用來代替C++托管擴展(Managed C++,下文使用MC++指代)的語言。這門語言在兼容原有的C++標準的同時,重新簡化了托管代碼擴展的語法,提供了更好的代碼可讀性。

              C++/CLI是一門獨立的語言(比如新的關鍵字),而不是像C++托管擴展一樣是C++的超集。(C++托管擴展有一些不標準的關鍵字如__gc和__value)。所以,C++/CLI對于這些語法有較大的改變,尤其是去除了一些意義不明確的關鍵字,增加了一些對.NET的特性的語言級別的支持。

              什么是托管代碼?什么是非托管代碼?

              托管代碼

              托管代碼是一microsoft的中間語言,他主要的作用是在.NET   FRAMEWORK的CLR執行代碼前去編譯源代碼,也就是說托管代碼充當著翻譯的作用,源代碼在運行時分為兩個階段:       1.源代碼編譯為托管代碼,(所以源代碼可以有很多種,如VB,C#,J#)       2.托管代碼編譯為microsoft的平臺專用語言。

              編譯器把代碼編譯成中間語言(IL),而不是能直接在你的電腦上運行的機器碼。中間語言被封裝在一個叫程序集(assembly)的文件中,程序集中包含了描述你所創建的類,方法和屬性(例如安全需求)的所有元數據。你可以拷貝這個程序集到另一臺服務器上部署它。

              托管代碼在公共語言運行庫(CLR)中運行。這個運行庫給你的運行代碼提供各種各樣的服務,通常來說,他會加載和驗證程序集,以此來保證中間語言的正確性。當某些方法被調用的時候,運行庫把具體的方法編譯成適合本地計算機運行的機械碼,然后會把編譯好的機械碼緩存起來,以備下次調用。(這就是即時編譯)隨著程序集的運行,運行庫會持續地提供各種服務,例如自動垃圾回收、運行庫類型檢查和安全支持等。這些服務幫助提供獨立于平臺和語言的、統一的托管代碼應用程序行為。

              Visual Basic .NET和C#只能產生托管代碼。如果你用這類語言寫程序,那么所產生的代碼就是托管代碼。如果你愿意,Visual C++ .NET可以生成托管代碼。當你創建一個項目的時候,選擇名字是以.Managed開頭的項目類型。例如.Managed C++ application。

              非托管代碼

              非托管代碼就是在Visual Studio .NET 2002發布之前所創建的代碼。例如Visual Basic 6, Visual C++ 6, 最糟糕的是,連那些依然殘存在你的硬盤中、擁有超過15年歷史的陳舊C編譯器所產生的代碼都是非托管代碼。托管代碼直接編譯成目標計算機的機械碼,這些代碼只能運行在編譯出它們的計算機上,或者是其它相同處理器或者幾乎一樣處理器的計算機上。非托管代碼不能享受一些運行庫所提供的服務,例如安全和內存管理等。如果非托管代碼需要進行內存管理等服務,就必須顯式地調用操作系統的接口,通常來說,它們會調用Windows SDK所提供的API來實現。就最近的情況來看,非托管程序會通過COM接口來獲取操作系統服務。

              跟Visual Studio平臺的其他編程語言不一樣,Visual C++可以創建非托管程序。當你創建一個項目,并且選擇名字以M FC,ATL或者Win32開頭的項目類型,那么這個項目所產生的就是非托管程序。

              兩者區別

              1、托管代碼是一種中間語言,運行在CLR上;

              非托管代碼被編譯為機器碼,運行在機器上。

              2、托管代碼獨立于平臺和語言,能更好的實現不同語言平臺之間的兼容;

              非托管代碼依賴于平臺和語言。

              3、托管代碼可享受CLR提供的服務(如安全檢測、垃圾回收等),不需要自己完成這些操作;

              非托管代碼需要自己提供安全檢測、垃圾回收等操作。

              托管代碼就意味著托管數據?答案是否定的。

              對于Visual Basic和C#來說,生活是簡單的,因為你沒有其它選擇。當你在那些語言里面聲明一個類,那么這個類的實例會在托管堆中被創建,垃圾收集器(GC)會幫我們管理這些對象的回收。但是在Visual C++中,你有另一個選擇。即使你正創建一個托管程序,你可以決定哪些類是托管類型,哪些類是非托管類型的。

              c++/cli有什么用?

              總之就一句話:使托管代碼調用非托管代碼(c#調用c++的dll)。

              責任編輯:

              標簽:

              相關推薦:

              精彩放送:

              新聞聚焦
              Top 中文字幕在线观看亚洲日韩