一区二区三区电影_国产伦精品一区二区三区视频免费_亚洲欧美国产精品va在线观看_国产精品一二三四

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

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

來源:CSDN 時(shí)間:2023-01-31 13:37:09

目錄

什么是c++/cli?

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


(資料圖片僅供參考)

托管代碼

非托管代碼

兩者區(qū)別

c++/cli有什么用?

什么是c++/cli?

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

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

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

托管代碼

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

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

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

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

非托管代碼

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

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

兩者區(qū)別

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

非托管代碼被編譯為機(jī)器碼,運(yùn)行在機(jī)器上。

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

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

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

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

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

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

c++/cli有什么用?

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

責(zé)任編輯:

標(biāo)簽:

相關(guān)推薦:

精彩放送:

新聞聚焦
Top 主站蜘蛛池模板: 应城市| 临沭县| 瓦房店市| 宜川县| 屯留县| 永城市| 台北县| 运城市| 林甸县| 公主岭市| 龙南县| 沁阳市| 上虞市| 安顺市| 安义县| 友谊县| 工布江达县| 建平县| 蒲江县| 海门市| 四川省| 称多县| 永济市| 安丘市| 喀什市| 黎城县| 禹州市| 翁源县| 安福县| 连州市| 隆昌县| 仁寿县| 大同县| 赞皇县| 河东区| 百色市| 荥经县| 绥化市| 宣化县| 独山县| 鄂托克旗|