托管代码是什么 VisualBasic。NET 和 C # 编译器创建。它编译成中间语言(IL) ,而不是可以直接在计算机上运行的机器代码。CIL 保存在一个称为程序集的文件中,以及描述所创建代码的类、方法和属性(如安全需求)的元数据。中的一站式部署单元。网络世界。您可以将其复制到另一台服务器,以便在那里部署程序集,而复制通常是部署过程中唯一需要的步骤。
托管代码在通用语言运行库中运行。运行库为运行代码提供各种各样的服务。在通常的事件过程中,它首先加载并验证程序集,以确保 CIL 是正常的。然后,正当方法被调用时,运行时安排将它们编译成适合运行程序集的机器的机器代码,并缓存这些机器代码,以便下次调用方法时使用。(这被称为 Just In Time,或 JIT 编译,或者常常只是 Jiting。)
在程序集运行时,运行库继续提供安全性、内存管理、线程等服务。应用程序由运行库管理。
VisualBasic.NET 和 C # 只能生成托管代码。如果您正在使用这些应用程序,那么您正在编写托管代码。Visual C + + .NET 可以产生托管代码,如果您喜欢: 当您创建一个项目,选择其名称开头的应用程序类型之一。管理,例如。管理的 C + + 应用程序。.
什么是非托管代码?
非托管代码是在 VisualStudio 之前使用的代码。NET 2002发布。Visual Basic 6,Visual C + + 6,见鬼,甚至那个你可能还在硬盘上闲逛的有15年历史的 C 编译器都生成了非托管代码。它直接编译成运行在您编译它的机器上的机器代码,也可以在其他机器上编译,只要它们有相同的芯片,或者几乎相同。它不是从不可见的运行时获得安全或内存管理等服务,而是从操作系统获得这些服务。而且重要的是,它显式地从操作系统中获取它们,通常是通过调用 WindowsSDK 中提供的 API。最近的非托管应用程序通过 COM 调用获得操作系统服务。
这可能会导致一些混淆: 当您创建一个。管理的 C + + 应用程序,生成产品是 CIL 与。外部扩展。创建 MFC 应用程序时,生成产品是一个本机代码的 Windows 可执行文件,还带有。外部扩展。这两个文件的内部布局完全不同。您可以使用中间语言反汇编程序 ildasm 来查看程序集内部,并查看元数据和 CIL。试着把 ildasm 指向一个非托管的 exe,你会被告知它没有有效的 CLR (通用语言运行库)头文件,不能被分解ーー同样的扩展名,完全不同的文件。
《原住民法典》怎么样?
短语本机代码在两个上下文中使用。许多人将它作为非托管代码的同义词: 使用旧工具生成的代码,或者在 Visual C + + 中特意选择的代码,这些代码不在运行时运行,而是在机器上本机运行。这可能是一个完整的应用程序,也可能是一个使用 COM Interop 或 PInvoke 从托管代码调用的 COM 组件或 DLL,这两个强大的工具可以确保您在迁移到新世界时可以使用旧代码。我更愿意说。非托管代码。因为它强调代码不能获得运行时的服务。例如,托管代码中的代码访问安全性阻止从其他服务器加载的代码执行某些破坏性操作。如果应用程序调用从其他服务器加载的非托管代码,则不会得到这种保护。