CLI定义
C#生成的不是机器码,而是中间语言——Common Intermediate Language(CIL)。在执行时在会被转换为机器码
注意区分CLI和CIL,充分理解含义
当然,代码想要执行,转换为机器码是不够的。还需要一个负责管理C#程序执行的代理,也就是虚拟执行系统(Virtual Execution System),又称“运行时”。不仅负责加载和运行程序,还负责安全保障,垃圾回收等额外功能
CLI标准包含以下规范:
-
虚拟执行系统(VE)——运行时
-
CIL——通用中间语言
-
公共类型系统——Common Type System (CTS)
-
公共语言规范——Common Language Specification (CLS)
-
元数据(Metadata)
-
框架(Framework)
运行时
“运行时”在将CIL代码转换为机器码并执行它之后,他仍在继续管理着代码的执行。在“运行时”这个代理环境下执行的代码称为托管代码,执行过程叫托管执行。数据所需的内存是由“运行时”自动分配和回收的
垃圾回收
.NET垃圾回收器,在每次执行垃圾回收期间会将清理之后的对象压缩在一起,这能使新对象更快的实例化,因为不需要搜索新的分配空间。另外如果计算机内存剩余大量空间,垃圾回收器很少运行——这就是为什么Unit