狠狠综合久久av,国产白丝在线观看,精品一区二区国语对白,欧洲在线视频

聯(lián)系我們 - 廣告服務(wù) - 聯(lián)系電話:
您的當(dāng)前位置: > 關(guān)注 > > 正文

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

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

目錄

什么是c++/cli?

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


(資料圖片僅供參考)

托管代碼

非托管代碼

兩者區(qū)別

c++/cli有什么用?

什么是c++/cli?

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

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

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

托管代碼

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

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

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

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

非托管代碼

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

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

兩者區(qū)別

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

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

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

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

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

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

托管代碼就意味著托管數(shù)據(jù)?答案是否定的。

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

c++/cli有什么用?

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

責(zé)任編輯:

標(biāo)簽:

相關(guān)推薦:

精彩放送:

新聞聚焦
Top 主站蜘蛛池模板: 竹北市| 上思县| 左贡县| 佛坪县| 华阴市| 栾川县| 比如县| 巴东县| 和政县| 木里| 泊头市| 山东| 台前县| 海淀区| 江油市| 文成县| 嘉峪关市| 余姚市| 吉安市| 陇西县| 枣庄市| 屯门区| 双辽市| 岱山县| 安远县| 泰宁县| 梁山县| 巩义市| 同江市| 报价| 曲靖市| 桂东县| 惠州市| 教育| 綦江县| 黑龙江省| 长阳| 南平市| 儋州市| 扶风县| 延川县|