26 C# 第二十一章 CLI
来源:互联网 发布:boot repair ubuntu 17 编辑:程序博客网 时间:2024/05/19 05:38
CLI (Common Language Infrastructure) 公共语言基础结构
C#生成的不是处理器能直接解释的指令,它生成的是一种中间语言指令,CIL (Common Intermediate Language)公共中间语言。CIL会被转换为处理器能理解的机器码。然而光有机器码还是不够的,C#还需要在一个代理的上下文中执行。负责管理C#程序执行的这个代理就是虚拟执行系统(Virtual Execution System VES),它更常见的称呼 "运行时"。
"运行时" 负责加载和运行程序,并在程序执行时提供额外的服务(安全保障,垃圾回收等)。
CLI 标准包含的规范:
- 虚拟执行系统 (VES "运行时")
- 公共中间语言 (CIL)
- 公共类型系统 (Common Type System CTS)
- 公共语言规范 (Common Language Specification, CLS)
- 元数据 (Metadata)
- 框架 (Framework)
C# 编译成机器代码
C#编译需要两个步骤:1) 由 C#编译器从C#转换为 CIL。
2) 将 CIL 转换为处理器能够执行的指令。
C# HelloWorld
using System;namespace HelloWorld{ class Program { static void Main(string[] args) { Console.WriteLine("Hello World!!"); } }}
CIL HelloWorld
.method private hidebysig static void Main(string[] args) cil managed{ .entrypoint // Code size 13 (0xd) .maxstack 8 IL_0000: nop IL_0001: ldstr "Hello World!!" IL_0006: call void [mscorlib]System.Console::WriteLine(string) IL_000b: nop IL_000c: ret} // end of method Program::Main
机器码
00000000 push ebp 00000001 mov ebp,esp 00000003 push edi 00000004 push esi 00000005 push ebx 00000006 sub esp,30h 00000009 xor eax,eax 0000000b mov dword ptr [ebp-10h],eax 0000000e xor eax,eax 00000010 mov dword ptr [ebp-1Ch],eax 00000013 mov dword ptr [ebp-3Ch],ecx 00000016 cmp dword ptr ds:[042E14B0h],0 0000001d je 00000024 0000001f call 76584EB3 00000024 nop Console.WriteLine("Hello World!!");00000025 mov ecx,dword ptr ds:[01B72088h] 0000002b call 76C6D420 00000030 nop
运行时
即使运行时将CIL代码转换为机器码,并开始执行之后它也在继续管理着代码的执行。在这样的环境下运行的代码叫托管代码,"运行时"控制程序执行的过程叫托管执行。1) 垃圾回收 和 .Net的垃圾回收
垃圾回收是根据程序的需要自动分配或回收内存的过程。.Net的垃圾回收机制使用的是一个分代的(generational),支持压缩的(compacting)和标记并清除(mark-and-sweep)的算法。分代:只存活过短暂时间的对象与已经在垃圾回收时存活下来的对象相比,前者会被更早的清理掉。
2) 性能
托管程序为应用程序带来了额外的开销。这就是个取舍的过程。提升开发效率还是保持程序运行时的性能。公共中间语言
公共语言基础结构的个重要的特点:支持多种语言在同一个系统内交互。比如VB.Net, J#, C++等等。元数据
除了执行指令,CIL代码还包含与类型和程序中包含的文件有关的元数据。- 程序或类库中每个类型的描述
- 清单信息,包括与程序本身有关的数据,及它依赖的库
- 嵌入代码中的自定义的特性
- 26 C# 第二十一章 CLI
- 第二十一章
- 第二十一章 条件语气
- 《佛密诸事》第二十一章:梦诏
- 梦里人第二十一章
- 第二章第二十一题
- 第三章第二十一题
- 第二章 第二十一题
- 第三章第二十一题
- 第三章第二十一题
- 第三章 第二十一题
- 第四章第二十一题
- 《道德经》第二十一章
- 第二十一章:并发(上)
- 第二十一章 动态链接库
- 第二十一章 配置squid服务
- 第二十一章配置squid服务
- 第二十一章 泛型(generic)
- poj 3182 The Grove (搜索+判断点在多边形内)
- DataGridView的编辑撤销与数据表回滚的表现
- HDU 2222 Keywords Search
- iOS5新增内容之支持文本输入的UIAlertView
- 页面背景图案网址
- 26 C# 第二十一章 CLI
- 键盘录入数字并求和
- C++“:”的作用
- define用法-linux
- c语言 链表逆置
- Linux下几个常用的快捷键,真的很实用
- Java VS C++ (1)注释
- 类似Google个性首页的页面自定义拖拽布局
- Android初级教程_获取Android控件的宽和高