zoukankan      html  css  js  c++  java
  • CLR执行模型

    1:首先先明确CLR的概念:

      CLR(Common Language Runtime):公共语言运行时,是一个可由多种编程语言使用的"运行时";

      在运行时,CLR根本不关心开发人员用的是哪一种语言来变写代码,它只关注语言是否是面向CLR(面向运行时)的.

    2:CLR的核心功能包括:

      内存管理、程序集加载、安全性、异常处理和线程同步。

    3:如图:

    无论是用的是哪一种编译器,结果都是一个托管模块(managed module),托管代码时一个标准的32位/64位Microsoft Windows可移植执行体(PE32/PE32+)文件.

    本地代码编译器,生成的是面向特定CPU架构(X86,X64或IA64)的代码.相反,每个面向CLR的编译器生成的都是IL(中间语言)代码,IL代码也被称为托管代码.

    除了生成IL,面向CLR的每个编译器还要在每个托管模块中生成完整的元数据,元数据是一组数据表.其中一些数据表描述了模块中定义的内容,元数据其实就是编译器所生成的一些完整数据.

    4:CLR实际是不和模块一起工作的,它是和程序集一起工作的.

    5:加载公共语言运行时

      我们生成的每个程序集既可以是一个可执行应用程序,也可以是一个DLL,最终是由CLR管理这些程序集中的代码的执行,所以必须在运行机器中安装.NET FrameWork.WIndows一些版本系统已经内置打包了好了.NET FrameWork.不过需要我们手动的开启.可以在控制面板中进行启动在此就不做详细解释.作为开发人员,这是不需要解释的.

    6:执行程序集的代码

     执行一个方法,第一必须把它的IL转换为本地CPU指令,这是CLR的JIT的本质.

    如图:

     就在Main方法执行之前,CLR会检测Main的代码引用的所有的类型,这导致CLR分配一个内部数据结构,用于管理对所引用的类型的访问.

    一个方法只有在首次调用时,才会造成一些性能损失,以后对该方法的所有调用都以本地代码的形式全速运行.无需重新验证IL并把它编译成本地代码.

    JIT编译器将本地CPU指令存储到动态内存中,一旦应用程序终止,编译好的代码也会被丢弃,所以,如果将来再次运行应用程序,或者同时启动应用程序的两个实例,JIT编译器必须再次将IL编译成本地指令.

    6:IL验证.

    IL是基于栈的,所以它的所有指令都要将操作数压入(push)一个执行栈,并从栈弹出(POP)结果.由于IL没有提供操作寄存器的指令,所以人们可以很容易地创建新的语言和编译器,生成CLR的代码.IL指令是无类型的.IL的好处在于是健壮和安全的,因为它编译为CPU指令,CPU会进行验证是否安全.

    7:Framework类库

      FCL(Framework Class Library):是一组DLL程序集的统称,其中含有很多的类型定义,每个类型都公开了一些功能.

      Web服务:Web service 技术或者WCF技术,可以非常简单的处理通过Internet发送的消息.

      Web窗体应用程序:Web Form

      Windows应用程序:开发windows GUI应用程序.

      富Internet应用程序:Silverlight技术,可以构建通过Internet来部署的GUI应用程序.这种程序能在Web浏览器的内部或外部运行,还可以在非Windows操作系统与移动设备傻瓜运行.

      Window控制台:提供简单快捷方便的方式,生成应用程序,编译器.

      Window服务:可以通过.NET FrameWork 生成"服务"应用程序.

      数据库存储过程:编写存储过程

      组件库:.NET FrameWord允许生成独立的程序集(组件),其中包含的类型可以轻松集成到任意的程序库中.

     

      

  • 相关阅读:
    初识Ubuntu 18.04(更换系统头像,截图,sy)
    HDU
    HDU
    进度1
    开课博客
    返回一个整数数组中最大子数组的和
    开学第一节课测试感受
    网页记账本开发四(基本完成)
    网页记账本开发三
    网页记账本开发二
  • 原文地址:https://www.cnblogs.com/MR-LIUB/p/3708225.html
Copyright © 2011-2022 走看看