C#在.NET编译执行过程_.NET_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > .NET > C#在.NET编译执行过程

C#在.NET编译执行过程

 2014/3/22 15:07:50  幕三少  博客园  我要评论(0)
  • 摘要:1..NET语言的编译器接受源代码文件,并生成名为程序集的输出文件。程序集要么是可执行的,要么是DLL程序集里的代码并不是本机代码,而是一种名称为CIL的中间语言程序集包含如下信息:程序的CIL程序中使用的类型的元数据对其他程序集引用的元数据2.程序的编译过程程序的CIL直到它被调用运行时才会被编译成本机代码。在运行时,CLR执行下面步骤:检查程序集的安全特性在内存中分配空间把程序集中的可执行代码发送给实时编译器(JIT),把其中的一部分编译成本机代码
  • 标签:.net C# 编译 net 执行 过程

1..NET语言的编译器接受源代码文件,并生成名为程序集的输出文件。

 

  • 程序集要么是可执行的,要么是DLL
  • 程序集里的代码并不是本机代码,而是一种名称为CIL的中间语言
  • 程序集包含如下信息:
    • 程序的CIL
    • 程序中使用的类型的元数据
    • 对其他程序集引用的元数据

2.   程序的编译过程

   程序的CIL直到它被调用运行时才会被编译成本机代码。在运行时,CLR执行下面步骤:

    • 检查程序集的安全特性
    • 内存中分配空间
    • 把程序集中的可执行代码发送给实时编译器(JIT),把其中的一部分编译成本机代码。

程序集中的可执行代码只在需要的时候由JIT编译器进行编译,然后它就被缓存起来以备在后来的程序中执行。这就意味着不被调用的代码不会被编译成本机代码,而且被调用的代码只被执行一次。

一旦CIL被编译成本机代码,CLR就在它运行时管理它,执行像内存释放、数组边界检查、检查参数类型、异常管理等任务。有两个重要的术语由此而生。

    • 托管代码:为.NET框架编写的代码称为托管代码,需要CLR
    • 非托管代码:不在CLR控制下运行的代码,比如Win32 C/C++ DLL,称为非托管代码

3.编译和执行过程图

QQ图片20140322124557" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="QQ图片20140322124557" src="/Upload/Images/2014032215/49617CCF6EFBA9D1.jpg" width="396" height="249">

发表评论
用户名: 匿名