第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

“托管”與“非托管”之間的區(qū)別

“托管”與“非托管”之間的區(qū)別

慕的地10843 2019-11-07 11:04:18
在談?wù)?NET時,我有時會聽到/聽說過它,例如“托管代碼”和“非托管代碼”,但我不知道它們是什么以及它們之間有什么區(qū)別。根據(jù)定義,它們有什么區(qū)別?使用其中任何一個的后果是什么?僅在.NET / Windows中存在這種區(qū)別嗎?
查看完整描述

3 回答

?
斯蒂芬大帝

TA貢獻(xiàn)1827條經(jīng)驗 獲得超8個贊

托管代碼

托管代碼是Visual Basic .NET和C#編譯器創(chuàng)建的。它運行在CLR(公共語言運行時)上,CLR提供了諸如垃圾收集,運行時類型檢查和引用檢查之類的服務(wù)。因此,可以將其視為“我的代碼由CLR 管理 ”。


Visual Basic和C#只能生成托管代碼,因此,如果您使用其中一種語言編寫應(yīng)用程序,則您將編寫由CLR管理的應(yīng)用程序。如果使用Visual C ++ .NET編寫應(yīng)用程序,則可以根據(jù)需要生成托管代碼,但這是可選的。


非托管代碼

非托管代碼直接編譯為機(jī)器代碼。因此,按照該定義,傳統(tǒng)C / C ++編譯器編譯的所有代碼都是“非托管代碼”。同樣,由于它編譯為機(jī)器代碼而不是中間語言,因此它是不可移植的。


沒有可用的內(nèi)存管理或CLR提供的其他任何功能。


由于您不能使用Visual Basic或C#創(chuàng)建非托管代碼,因此在Visual Studio中,所有非托管代碼都使用C / C ++編寫。


混合兩者

由于Visual C ++可以編譯為托管或非托管代碼,因此可以在同一應(yīng)用程序中將兩者混合使用。這模糊了兩者之間的界線,并使定義變得復(fù)雜,但是值得一提的是,因此,您知道,例如,如果您使用帶有錯誤編寫的非托管代碼的第三方庫,仍然會發(fā)生內(nèi)存泄漏。


這是我通過谷歌搜索找到的示例:


#using <mscorlib.dll>

using namespace System;


#include "stdio.h"


void ManagedFunction()

{

    printf("Hello, I'm managed in this section\n");

}


#pragma unmanaged

UnmanagedFunction()

{

    printf("Hello, I am unmanaged through the wonder of IJW!\n");

    ManagedFunction();

}


#pragma managed

int main()

{

    UnmanagedFunction();

    return 0;

}


查看完整回答
反對 回復(fù) 2019-11-07
  • 3 回答
  • 0 關(guān)注
  • 1418 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號