当前位置: 首页 > news >正文

CLR的执行模型(1):将源代码编译成托管模块

终于下决心写这个系列了。

之前看过那本《C#图解教程》,但是被某大佬推荐了《CLR via C#》,才发现自己对真正的力量一无所知。

不过也正因为无知,所以才下决心开始在博客上记录这些吧。

(一)CLR简介

CRL,全名Common Language Runtime,公共语言运行库,是一个多个编程语言使用的“运行时”。CLR的核心功能,比如内存管理、程序集加载、安全性、异常处理、线程同步,可由面向CLR的所有语言使用。

支持CLR的任何语言都可以创建源代码文件,然后用对应的编译器检查语法,分析代码。无论是什么编译器,最后都是托管模块。托管模块是标准的32位的可移植执行体(PE32)文件,或者是64位的(PE32+),都需要CLR才能运行。

                   将源代码编译成托管模块

 

(二)托管模块的组成部分

PE32或者PE32+头:使用PE32头,文件能在32和64位机器上运行。PE32+只能在64位机器上运行。

        

 

CLR头:包含使这个模块成为托管模块的信息。

IL中间语言代码:编译器编译源码的时候生成的代码。运行时,CLR将IL编译成本机CPU指令。

元数据:面向CLR的每个编译器要在每个托管模块中生成完整的元数据。元数据是一个数据表的集合。一些数据描述了模块中定义了什么,另一些描述了模块中引用了什么。由于编译器同时生成元数据和代码,把他们绑在一起,并嵌入最终生成的托管模块。所以元数据和他描述的代码不会失去同步。

C#,VB,F#和IL汇编器总是生成包含托管代码IL和托管数据(可GC的数据类型)的模块。为了执行包含托管代码以及托管数据的模块,用户必须在自己的计算机上装好CLR。

 

转载于:https://www.cnblogs.com/renzhoushan/p/10353017.html

相关文章:

  • 聊聊flink的TableFactory
  • SpringAOP源码分析总结
  • mongodb分片
  • 某些编程语言更容易出错?研究人员提出质疑
  • 通过npm或yarn自动生成vue组件
  • EOS是什么
  • 互联网大厂Java面试题:使用无界队列的线程池会导致内存飙升吗?
  • App Store 隐私政策网址(URL)
  • 企业级java springboot b2bc商城系统开源源码二次开发(十六)用restTemplate消费服务...
  • GraphQL 官方自述文档(翻译)
  • 网页视频流m3u8/ts视频下载
  • OS开发基础——多线程的简单应用
  • 阿里云ACE认证学习知识点梳理
  • 二、flask配置与应用-flask
  • Linux下的计算器(bc、expr、dc、echo、awk)知多少?
  • JavaScript-如何实现克隆(clone)函数
  • $translatePartialLoader加载失败及解决方式
  • 08.Android之View事件问题
  • 2019.2.20 c++ 知识梳理
  • 2019年如何成为全栈工程师?
  • CentOS6 编译安装 redis-3.2.3
  • CSS 专业技巧
  • Docker 笔记(2):Dockerfile
  • egg(89)--egg之redis的发布和订阅
  • Eureka 2.0 开源流产,真的对你影响很大吗?
  • js面向对象
  • MYSQL 的 IF 函数
  • React 快速上手 - 06 容器组件、展示组件、操作组件
  • SpiderData 2019年2月13日 DApp数据排行榜
  • Vue官网教程学习过程中值得记录的一些事情
  • WordPress 获取当前文章下的所有附件/获取指定ID文章的附件(图片、文件、视频)...
  • 笨办法学C 练习34:动态数组
  • 湖南卫视:中国白领因网络偷菜成当代最寂寞的人?
  • 面试总结JavaScript篇
  • 那些年我们用过的显示性能指标
  • 浅谈Kotlin实战篇之自定义View图片圆角简单应用(一)
  • 思维导图—你不知道的JavaScript中卷
  • Semaphore
  • 仓管云——企业云erp功能有哪些?
  • ​一文看懂数据清洗:缺失值、异常值和重复值的处理
  • ​中南建设2022年半年报“韧”字当头,经营性现金流持续为正​
  • #14vue3生成表单并跳转到外部地址的方式
  • #define
  • #etcd#安装时出错
  • (C++)栈的链式存储结构(出栈、入栈、判空、遍历、销毁)(数据结构与算法)
  • (Redis使用系列) Springboot 使用redis的List数据结构实现简单的排队功能场景 九
  • (附源码)计算机毕业设计SSM教师教学质量评价系统
  • (实战)静默dbca安装创建数据库 --参数说明+举例
  • (四)汇编语言——简单程序
  • ./configure,make,make install的作用(转)
  • .net core webapi 大文件上传到wwwroot文件夹
  • .NET Core/Framework 创建委托以大幅度提高反射调用的性能
  • .NET 中使用 TaskCompletionSource 作为线程同步互斥或异步操作的事件
  • .netcore 如何获取系统中所有session_ASP.NET Core如何解决分布式Session一致性问题
  • // an array of int