到底什么是托管,什么是非托管的研究

托管代码 (managed code) :由公共语言运行库环境(而不是直接由操作系统)执行的代码。托管代码应用程序可以获得公共语言运行库服务,例如自动垃圾回收、运行库类型检查和安全支持等。这些服务帮助提供独立于平台和语言的、统一的托管代码应用程序行为。
Unmanaged Code - 非托管代码 :在公共语言运行库环境的外部,由操作系统直接执行的代码。非托管代码必须提供自己的垃圾回收、类型检查、安全支持等服务;它与托管代码不同,后者从公共语言运行库中获得这些服务。
    那到底什么是托管,什么是非托管?
    非托管代码的英文名是Unmanaged Code ,它是在公共语言运行库环境的外部,由操作系统直接执行的代码。非托管代码必须提供自己的垃圾回收、类型检查、安全支持等服务;它与托管代码不同,后者从公共语言运行库中获得这些服务。
        接下来的问题是什么使公共语言运行库环境英文名是Common Language Runtime)呢。那首先看一下.net framework的介绍。
       .NET Framework 是支持生成和运行下一代应用程序和 XML Web services 的内部 Windows 组件
.NET Framework 具有两个主要组件:公共语言运行库.NET Framework 类库(Framework Class Library公共语言运行库是 .NET Framework 的基础。可以将运行库看作一个在执行时管理代码的代理,它提供内存管理、线程管理和远程处理等核心服务,并且还强制实施严格的类型安全以及可提高安全性和可靠性的其他形式的代码准确性。事实上,代码管理的概念是运行库的基本原则。以运行库为目标的代码称为托管代码,而不以运行库为目标的代码称为非托管代码。.NET Framework 的另一个主要组件是类库,它是一个综合性的面向对象的可重用类型集合,可以使用它开发多种应用程序,这些应用程序包括传统的命令行或图形用户界面 (GUI) 应用程序,也包括基于 ASP.NET 所提供的最新创新的应用程序(如 Web 窗体和 XML Web services)。
        然后我们来看看托管代码的执行过程:

1、选择编译器:

为获得公共语言运行库提供的优点,必须使用一个或多个针对运行库的语言编译器,如 Visual Basic、C#、Visual C++、JScript 或许多第三方编译器(如 Eiffel、Perl 或 COBOL 编译器)中的某一个。

由于运行库是一个多语言执行环境,因此它支持各种数据类型和语言功能。您所用的语言编译器确定可用的运行库功能,而您使用这些功能设计代码。编译器(而不是运行库)建立代码必须使用的语法。如果您的组件必须完全能够被用其他语言编写的组件使用,您的组件的导出类型必须只公开公共语言规范 (CLS) 中包括的语言功能。

2、编译,将源代码翻译为microsoft中间语言(MSIL)并生成所需的元数据。

3、在执行时,实时 (JIT) 编译器将 MSIL 翻译为本机代码。在此编译过程中,代码必须通过验证过程,该过程检查 MSIL 和元数据以查看是否可以将代码确定为类型安全。

4、运行代码:公共语言运行库提供使执行能够发生以及可在执行期间使用的各种服务的结构



posted @ 2008-05-04 10:08  陋室  阅读(3245)  评论(1编辑  收藏  举报