Answers:
托管代码是Visual Basic .NET和C#编译器创建的。它在CLR(公共语言运行时)上运行,除其他事项外,CLR提供诸如垃圾收集,运行时类型检查和引用检查之类的服务。因此,可以将其视为“我的代码由CLR 管理 ”。
Visual Basic和C#只能生成托管代码,因此,如果您使用这些语言之一编写应用程序,则您将编写由CLR管理的应用程序。如果使用Visual C ++ .NET编写应用程序,则可以根据需要生成托管代码,但这是可选的。
非托管代码直接编译为机器代码。因此,根据该定义,传统C / C ++编译器编译的所有代码均为“非托管代码”。同样,由于它编译为机器代码而不是中间语言,因此它是不可移植的。
没有可用的内存管理或CLR提供的其他任何功能。
由于您不能使用Visual Basic或C#创建非托管代码,因此在Visual Studio中,所有非托管代码都用C / C ++编写。
由于Visual C ++可以编译为托管或非托管代码,因此可以在同一应用程序中将两者混合使用。这模糊了两者之间的界线,并使定义变得复杂,但是值得一提的是,因此,您知道,例如,如果您使用带有错误编写的非托管代码的第三方库,仍然会发生内存泄漏。
这是我通过谷歌搜索找到的示例:
#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;
}
托管代码是Microsoft提出的一种区分形式,用于标识需要且仅在公共语言运行时虚拟机的“管理”下执行(导致字节码)的计算机程序代码。