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

        在非托管的C/C++中,可以进行一些底层的操作


        "公共语言运行时"(CLR)是一个可由多种编程语言使用的"运行时"
        
        CLR的核心功能包含:
            内存管理
            程序集加载
            安全性
            异常处理
            线程同步
     
        可由支持CLR的编程语言编写源代码,再由对应的编译器检查语法和分析源代码,最后都会生成托管模块,托管模块需要CLR才能执行
     
        托管模块的组成:
            PE32或PE32+头:包含与本地CPU代码相关信息
            CLR头:托管模块的头信息,包含CLR版本,一些标志等
            元数据:元数据表,包含源代码定义的类型和成员,另一张表包含源代码中引用的类型和成员
            IL中间语言:编译器编译生成的的代码,在运行时,CLR将IL代码编译成本地代码
         
        程序集: 
            程序集是一个或多个模块/资源文件的逻辑性分组,是重用、安全性以及版本控制的最小单元,在CLR中,程序集相当于一个组件 
     
        托管程序集包含元数据和IL代码,IL是与CPU无关的机器语言,高级语言通常只公开CLR所有功能的一个子集,但IL能访问CLR中的所有功能
     
        JIT,即时编译,将IL转换成本地CPU指令(just in time),并对代码进行优化,优化后的代码性能更加出色
     
        JIT编译器将IL编译成本地CPU指令,将其存储在动态内存中,当程序结束,内存会回收。如果再一次启动程序或同一个程序打开两次,都会再次将IL编译成CPU指令
     
        IL是基于栈的,它的所有指令都将操作数压入一个执行栈,并从栈中弹出的结果。IL指令是无类型的。在将IL编译成本地CPU指令时,CLR会进行一次安全检测,检测所有的代码的安全性
     
        Microsoft C#编译器允许开发人员写不安全的代码,只在在程序有需要直接操作内存地址,并处理地址中的字节,或者与其它非托管程序交互,编写一个高性能的算法等
        
        本地代码生成器:NGen.exe
        将IL代码编译成本地代码,加快程序的启动速度,减少应用程序的工作集,实现共享
            
        通用类型系统
        CLR是完全围绕类型展开的,Microsoft制定了一个规划"通用类型系统"(CTS),描述了类型的定义和行为
     
        公共语言规范
        定义一个语言规范,由多个编程语言去实现,在开发过程中,遵循这个规范可以得到更好的兼容性
     
        使用C#来编写代码,告诉编译检查CLS的相容性
        [assembly: CLSCompliant(true)]
        
        CLR支持三种互操作情形
        1.托管代码能调用DLL中的非托管函数
        2.托管代码可以使用现有的COM组件
        3.非托管代码可以使用托管类型
  • 相关阅读:
    很特别的一个动态规划入门教程
    很特别的一个动态规划入门教程
    很特别的一个动态规划入门教程
    很特别的一个动态规划入门教程
    57.深度优先搜索 广搜练习:迷宫(未结题)
    UPC10525: Dove 打扑克
    UPC10532: 花
    UPC10544: 凉宫春日的叹息
    UPC3459: 移除字符
    UPC3457: Next K Permutation
  • 原文地址:https://www.cnblogs.com/a2htray/p/4502046.html
Copyright © 2011-2022 走看看