|
|
1
186
托管代码托管代码是Visual Basic.NET和C编译器创建的代码。它运行在clr(公共语言运行时)上,它提供垃圾收集、运行时类型检查和引用检查等服务。所以,把它想成,“我的代码是 管理 由CLR。” Visual Basic和C_can 只有 生成托管代码,因此,如果您正在用其中一种语言编写应用程序,那么您正在编写由CLR管理的应用程序。如果您在VisualC++.NET中编写应用程序,如果您愿意,可以生成托管代码,但它是可选的。 非托管代码非托管代码直接编译为计算机代码。因此,由传统C/C++编译器编译的所有代码都是“非托管代码”。而且,由于它编译为机器代码而不是中间语言,因此不可移植。 没有可用内存管理或clr提供的任何其他内容。 由于您不能用VisualBasic或C语言创建非托管代码,所以在VisualStudio中,所有非托管代码都是用C/C++编写的。 混合二者由于VisualC++可以被编译为托管代码或非托管代码,因此可以将两个代码混合在同一应用程序中。这模糊了两者之间的界限,并使定义复杂化,但值得一提的是,如果您使用的是第三方库,其中包含一些写得不好的非托管代码,那么您仍然可以有内存泄漏。 以下是我发现的一个例子 googling :
|
|
|
2
79
这比.NET和Windows更通用。Managed是一种环境,您可以在其中自动进行内存管理、垃圾收集、类型安全…不受管理就是一切。例如.NET是一个托管环境,C/C++是非托管的。 |
|
|
3
13
托管代码是微软创造的一种区别,它用来识别计算机程序代码,这些代码需要并且只在公共语言运行时虚拟机的“管理”下执行(从而产生字节码)。 |
|
|
4
3
托管代码是为托管运行时执行环境(如.NET技术中的公共语言运行时)的服务编写的代码。 在公共语言运行库下运行的托管代码不能在运行库环境外访问,也不能直接从运行库环境外调用。它是指本机执行代码和运行时之间的合作契约。它提供垃圾收集、运行时类型检查、引用检查等服务。通过使用托管代码,您可以避免许多典型的编程错误,这些错误会导致安全漏洞和不稳定的应用程序,同时,许多非生产性的编程任务也会被自动处理,例如类型安全检查、内存管理、销毁未使用物体的离子等。 什么是非托管代码? 非托管代码直接编译到机器代码并由操作系统直接执行。生成的代码本机运行在主机处理器上,处理器直接执行编译器生成的代码。它总是针对特定的体系结构进行编译,并且只在预期的平台上运行。因此,如果您想在不同的体系结构上运行相同的代码,那么您必须使用该特定的体系结构重新编译代码。 非托管可执行文件基本上是一个二进制映像,即x86代码,直接加载到内存中。这种方法通常会导致最快的代码执行,但在大多数情况下,诊断和从错误中恢复可能很困难,而且耗时。内存分配、类型安全、安全性等需要由程序员负责,这将导致非托管代码容易出现内存泄漏,如缓冲区溢出、指针重写等。 所有由传统C/C++编译器编译的代码都是非托管代码。COM组件、ActiveX接口和Win32API函数是非托管代码的示例。托管代码是用许多高级编程语言编写的代码,这些代码可用于微软.NET框架,包括VB.NET、C.Y.J、JyScript、JScript、.NET等。因为VisualC++可以被编译为托管代码或非托管代码,所以可以在同一个应用程序中混合这两个代码。 |