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;
}
- 3 回答
- 0 關(guān)注
- 1418 瀏覽
添加回答
舉報