zoukankan      html  css  js  c++  java
  • C#基础之CLR的执行模型(一)

    一、将源代码编译成托管模块

    • CLR是什么?

    全称是Common Language Runtime,即公共语言运行时。

    所谓公共,也就是说,它支持多种编程语言。这正是它的牛逼之处,想一想,你可以用你所擅长的语言来实现功能,甚至能将多种语言杂揉在一起,各司其职,多酷啊!

     

    • 微软提供了好几个面向运行时的编译器,你造吗?

    C++/CLI、C#、Visual Basic、F#、Iron Python、Iron Ruby。除此之外,还有一个中间语言汇编器IL(Intermediate Language)。

    这些编译器最终会将源代码,编译成托管模块。

    其中C++编译器是最强的,因为它允许开发人员同时写托管和非托管代码,并生成到同一个模块中!最最关键的是,只有C++编译器才有这功能,别的编译器都没有!独一无二啊有米有!

    是时候学好C++跟人装逼了!

    除了微软,其他机构也提供面向CLR的各种编译器。

     

    • 托管模块是啥?

    它是标准的32位Windows可移植执行体文件,也就是传说中的PE32,也可以是标准的64位Windows可移植执行体文件,即PE32+,具体看编译时CPU的设置了。

    据说托管程序集会利用Windows的数据执行保护和地址空间布局随机化,以增强整个系统的安全性。

     

    • 托管模块中都有啥? 
    托管模块的各个部分
    组成部分 说明
    PE32或PE32+

    它决定了程序是在32位系统,还是64位系统上运行。

    除此之外,它还标识了文件类型(GUI、CUI、DLL)和生成时间。若是包含本机CPU代码的模块,还会包含与本机CPU代码有关的信息。

    CLR头 包含CLR版本,托管模块入口方法的MethodDef元数据token,以及模块的元数据、资源、强名称、标志等。
    元数据 每个托管模块都有元数据表。主要有两种表,一是描述源代码中定义的类型和成员的表,一是描述源代码引用的类型和成员的表。
    IL代码 编译后的代码。在运行时,CLR将它编译成本机CPU指令。

     

     

     

     

    • 元数据都有啥用?

    多了去了,比如它包含了C/C++的类型和成员信息,从而免去了读取C/C++库文件,比如VS的智能感知,比如类型验证,比如序列化,比如垃圾回收器跟踪对象生存期。

  • 相关阅读:
    使用VisualStudio进行单元测试之二
    使用VisualStudio进行单元测试之一
    ExtJS监听键盘事件:回车键实现登录功能
    PPTP无法连网
    Android深度探索.
    Android深度探索
    Android驱动开发
    window.open()的具体使用方法
    js控制的几种页面跳转和传值(转载)
    Hatching shader
  • 原文地址:https://www.cnblogs.com/yyzj/p/6180858.html
Copyright © 2011-2022 走看看