浅谈C#中间语言和元数据

开发 后端
这里介绍C#中间语言和元数据,由C#编译器生成的受管代码并不是原始代码,但它是中间语言代码。这种中间语言代码自身变成了NGWS runtime的受管执行进程的入口。

NGWS Runtime

NGWS和NGWS Runtime为你提供了一种运行时环境。该运行时管理执行代码,并提供了使编程更容易的服务。只要你的编译器支持这种运行时,你就会从这种受管理的执行环境中得益。

你猜测C#编译器支持NGWS runtime很正确,但是不仅它支持NGWS runtime,VB和C++也支持。这些为支持运行时所创建的代码称作"受管代码"(managed code)。以下是你的应用程序从NGWS runtime那里所得到的利益:
◆交叉语言集成(通过通用语言规范)
◆自动内存管理(垃圾收集)
◆交叉语言异常处理(统一展开)
◆增强安全(包括类型安全)
◆版本支持("DLL地狱"终结者)
◆组件交互简化模式

因NGWS runtime 要提供了所有的这些好处,编译器必须把元文件和受管代码一起发出。元文件描述代码中的类型,它和你的代码存在一起(与PE类似——PE为可变位执行文件)

正如你从很多种交叉语言功能所看到的,NGWS runtime主要是关于高度集成交叉多异编程语言(tight integration across multiple different programming languages)。这种支持可达到允许你从一个VB对象派生出一个C#类的程度(我后面会给出要讨论的文章)。

C#程序员将会喜欢的一个功能是,他们不必担心内存管理-也就是说不必担心臭名昭著的内存泄漏。NGWS runtime提供了内存管理,当对象和变量的生命期结束(不再被引用)时,垃圾收集器释放它们。我真的喜欢这个功能,因为在COM中的内存管理一直是我的一块心病。

应该鼓励配置一个管理应用程序或者组件。因为管理应用程序含有元数据文件,NGWS runtime可以利用这些信息,以确保你的应用程序具有它所需的各种规定版本。所产生的明显效果为,由于你的代码没有相互之间的依赖,很少可能出现中断。

这章余下来讨论NGWS runtime的C#中间语言和元数据,直到你的C#应用程序能执行为止。

C#中间语言和元数据

由C#编译器生成的受管代码并不是原始代码,但它是中间语言代码。这种中间语言代码自身变成了NGWS runtime的受管执行进程的入口。中间语言代码明显的优势在于它是CPU无关的,这也意味着,你要用目标机器上的一个编译器才能把中间语言代码转换成原始代码。

尽管中间语言代码由编译器产生,但它并不是编译器提供给运行时仅有的东西。编译器同样产生有关你代码的元数据,它告诉运行时有关你代码的更多的东西,例如各种类型的定义、各种类型成员的签名以及其它数据。基本上,元数据是类型库、注册表内容和其它用于COM的信息。尽管如此,元数据还是直接和执行代码合并在一起,并不处在隔离的位置。

C#中间语言和元数据存放于扩展了PE格式的文件中(PE格式用于。exe和。dll文件)。当这样的一个PE文件被装载时,运行时从文件中定位和分离出中间语言和元数据.

在进一步说明之前,我想给你已有的中间语言指令的简短目录。尽管它不是一个完整的清单,也不需要你熟记和理解,但是它列出了你所必需的、C#程序所基于的知识基础。
◆算术和逻辑操作符
◆控制流
◆直接内存访问
◆堆栈操作
◆参数和局部变量
◆堆栈分配
◆对象模式
◆实例类型值
◆临界区
◆数组
◆分型位置
◆即时编译器(JITters)

【编辑推荐】

  1. 介绍Mono C#编译器
  2. C#运算符重载学习总结
  3. 概述C#语言的结构体
  4. C#遗传算法学习笔记
  5. 讨论C#分部方法
责任编辑:佚名 来源: 51CTO.com
相关推荐

2010-06-17 11:51:20

java.net DLLC#

2009-10-30 14:21:00

VB.NET开发语言

2009-08-14 16:46:44

C#元数据

2009-08-20 18:30:33

C# ReaderWr

2011-09-21 10:56:31

C#结构

2009-08-12 11:24:25

C# String对象

2009-08-07 11:26:53

C#数组结构

2009-08-19 17:12:18

C# Connecti

2009-08-31 09:37:09

C# Employee

2009-08-26 13:15:38

C#选择控制

2009-08-26 15:46:01

C#匿名类型

2009-08-20 10:24:52

C#开发WinForm

2009-08-25 16:16:43

C# oledbcon

2009-09-02 15:41:21

C# HTTPWebR

2009-08-14 17:58:05

C#接口方法

2009-08-06 15:30:23

C#类型系统

2022-07-01 11:56:54

C语言C++编程语言

2009-08-10 10:04:25

C#抽象类C#接口

2009-09-02 17:10:45

C#语言入门

2009-08-28 15:58:54

C#窗体里调用
点赞
收藏

51CTO技术栈公众号