C#探索之路(9):深入理解C#代码编译的过程以及原理

C#探索之路(9):深入理解C#代码编译的过程以及原理

文章目录

  • C#探索之路(9):深入理解C#代码编译的过程以及原理
      • 一、前言:概念解析
        • 1、编译器:
        • 2、JIT是什么?
        • 3、AOT是什么?
        • 4、如何理解这个“基于运行时”的概念?
        • 5、“在程序运行之前”这个概念如何理解?
        • 5、编译和运行分别是什么意思?
        • 6、JIT编译器(Just in Time):
        • 7、JIT编译器何时运行?在哪?
        • 8、(误区)AOT并不是只在苹果系列手机中才有使用到,Android系统的手机里面也有使用到。
        • 9、辨析JIT和AOT之间的作用
      • 二、C#中代码编译的过程:
        • 1、简易的编译流程图:
        • 2、编译阶段与运行阶段流程图:
        • 3、可执行程序文件的组成结构:
        • 4、 .NET编译运行的详细流程图:
      • 三、个人总结
      • 四、参考链接:

一、前言:概念解析

1、编译器:

编译器是将用某种程式语言写成的源代码(源语言),转换成另一种程式语言(目标语言)等价形式的程序。通常我们是将某种高级语言(如C、C++、C# 、Java)转换成低级语言(汇编语言、机器语言)。

*简而言之:编译器是高级语言解释器(转换器)

转换缘由:机器组成是CPU,机器只能读懂并运行对应的cpu指令,对于我们的int、short、for这部分的内容根本不理解也不认识。

2、JIT是什么?

JIT(Just-In-Time)是一种运行时编译技术,它指的是在程序运行的过程中,将未编译的代码实时地转换成可执行代码的过程。在Java等语言中,JIT通常是编译字节码的过程。使用JIT可以提高程序的执行速度和性能,因为即时编译器可以针对具体平台和硬件,对程序进行优化。

简而言之:JIT是运行时编译技术

3、AOT是什么?

AOT(Ahead-of-Time)是一种静态编译技术,它可以在程序运行之前将代码编译成本地机器码。这与JIT(Just-in-Time)技术不同,后者是在程序运行时将代码转换成本地机器码。AOT编译可以提高程序的性能和安全性,因为编译后的代码可以直接在系统上执行,不需要再通过JIT编译器转换。另外,使用AOT编译可以避免启动程序时的JIT延迟,从而提高启动时间。AOT编译在很多情况下都是一个好的选择,尤其是当代码需要高效执行、在启动时需要快速启动和运行、或需要避免程序被反向工程时。

简而言之:AOT是静态编译技术

4、如何理解这个“基于运行时”的概念?

“基于运行时”是指在程序运行的时候进行编译和代码转换的过程。在C#中,代码首先被编写或者编译成CIL(中间语言)代码,这些代码不会直接在计算机上运行。相反,CIL代码会在程序运行时传递给运行时环境,该环境会将其编译成本地代码,然后使用操作系统调用来执行该代码。

因此,"基于运行时"中的"运行时"是指实际程序运行时的环境。在该环境中,CIL代码通过JIT编译器转换为本机代码,以便在计算机上直接执行。这种编译方式可以提高代码的执行效率,以适应不同的平台和操作系统。同时,它也可以实现动态代码生成和执行,以便应对动态环境的变化。

总之,基于运行时的编译方式是一种在程序运行时进行编译和代码转换的过程,它使用JIT编译器将CIL代码转换为本机代码,从而提高程序的执行效率。

5、“在程序运行之前”这个概念如何理解?

“在程序运行之前”指的是在程序开始执行之前,通过AOT编译器将代码转换成本地机器码的过程。与JIT编译器不同,AOT编译器会在程序运行之前预先将代码转换成本地机器码,然后将其保存在目标设备的文件系统上,以便在运行时直接执行。这种编译方式的好处是可以避免程序在启动时的JIT延迟,从而提高程序启动速度和执行效率。通常情况下,AOT编译器会在将程序部署到目标设备上之前,通过提前编译的方式将程序代码转换成本地机器码。

5、编译和运行分别是什么意思?

编译:“编译”是将源代码转换成中间代码(ILCode),或者直接将代码转换成可执行文件(exe文件)

运行:“运行”是指计算机执行可执行代码并输出结果

6、JIT编译器(Just in Time):

JIT是基于运行时的编译器,它可以在代码执行时将IL代码(中间语言代码)转换为本机代码(机器指令)。在C#中,代码通经常编写IL代码的格式,并将其存储由于IL是一种中间语言,因此在执行时需要使用.NET运行时才能将其转换为本机代码并执行。

JIT的作用是优化代码的执行速度。使用JIT编译器,可以将IL代码转换为本机代码,这样就可以更快地执行代码。当代码第一下次被执行时,JIT会将该代码块编译成本机代码,并将编译后的代码打包起来,以方便在以后执行时重新使用。这可以提供更高的代码执行速度,并减少最少的内存和硬盘空间的使用。

简而言之:JIT编译器是一种将IL代码转换为本机代码的编译器,其主要作用是优化代码的执行速度。

7、JIT编译器何时运行?在哪?

JIT编译器是.NET运行时环境的一部分,它会在程序运行时自动运行。

JIT编译器通常部署在.NET运行时环境中,在程序开始执行时自动运行

8、(误区)AOT并不是只在苹果系列手机中才有使用到,Android系统的手机里面也有使用到。

Android 7.0上,JIT 编译器被再次使用,采用AOT/JIT 混合编译的策略。

9、辨析JIT和AOT之间的作用

这两个都是一种编译技术,至于设备本身支不支持,这取决于设备所依赖的操作系统以及设备平台本身。

10、

二、C#中代码编译的过程:

1、简易的编译流程图:

源代码–>解释器–>MSIL阶段(JIT编译器–>编译成本机代码(01000110…))

2、编译阶段与运行阶段流程图:

3、可执行程序文件的组成结构:

4、 .NET编译运行的详细流程图:

三、个人总结

​ 最近,在博客上偷懒了,不过有在认真整理自己的知识体系,并且在最近这段时间内,大佬对我的及时“拷打”(点播)让我不断地去调整自己对自己的认知。经过思考,我觉得我是个fw(开个玩笑),不过也相差无几了(并非妄自菲薄),个人觉得只有真的能够在技术上能够独当一面的时候,这个时候才算是脱离菜鸟这个称号。

​ 过段时间,准备自己弄个公众号督促一下自己,大概每周发至少两篇高质量的文章吧。一是提醒自己在博客笔记这块儿不要懈怠,另一方面,也是为了让自己通过博客的方式能够加深自己对技术概念的而理解和应用。

​ 有个我自己对自己认识后存在的几个误区,我需要提出来警醒各位博客博友,①知识体系散,不稳固。②基础不够夯实。③浮于表面,对概念的理解和技术应用停留于表面。④找不到偏重点和突破点,类似于瓶颈期间。看不到比较显著的提升。

​ 如果你有遇到过以上这么几种情况,恭喜你,脑袋要开始痒了,要涨脑子(知识)了。造成这样的几个痛点误区的原因:①应用少②接触不到③没有主动的去深入理解原理④基础还是不够牢固。

​ 如果你也是这样,沉下心来吧,慢慢去了解,慢慢去总结,慢慢去加深。

​ 打破砂锅查到底,把概念解析清楚,把原理理解透彻,才不会给后续的学习埋下障碍。虽然打破砂锅查到底可能会面临一系列的问题如图 :

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SPGPkf56-1687203638721)(C:\Users\JackiieWang\AppData\Roaming\Typora\typora-user-images\image-20230620031324836.png)]

真实的想法:

​ 一开始,我其实就知道自己对这个半只不解,正好这两天需求量比较少,就注重去加强对这方面的理解和学习,而且我看到太多的文章,讲的一知半解,对于概念解析的太过于笼统,官方,也许有的博主其实自己是明白过程的,但是我发现有很多的文章要么太过于简单,要么太过于复杂,让我对这篇文章的相关原理的了解和实现在一定程度上花费了很大的时间去总结和归纳、理解。

​ 虽然查询问题的过程可能繁琐,可能复杂,但是最终殊途同归…,开启你自己的造神之路。其实说个实话,我其实觉得当我对这些概念的理解加深后,我个人是非常满足的,知其然不知其所以然才是让我最难受的,”喔这个阿,这个我懂,但懂得不多。“”喔喔喔~!我知道一丢丢,但我形容不出来,对!就是你指的这个意思…“,技术宅,扎实一点,靠谱一点。

​ 当然,我们现在其实一直都是站在前人的肩膀上去进行二次学习和了解,很多内容前人都总结好了,我们只需要自己去理解,自己去辨析证伪,在一定程度上,极大程度减少了学习成本。

​ 还有很重要的一点,利用好AI可以在一定程度上加大学习效率。

四、参考链接:

  • C#/.NET程序运行流程

  • C#程序的编译过程

  • 知乎:C#的编译过程

  • 深度理解C#的执行原理

  • C#是如何执行的

  • 对于exe可执行程序的理解:

  • exe文件的由来和原理

  • 什么是运行时

  • 解释执行和编译执行的区别、基于栈和基于寄存器的指令集区别

  • 编译期初始化与运行期初始化

  • 编译执行和解析执行的区别以及执行的速度比较?

  • 编译和运行的区别是什么

  • 编译、生成、调试和运行有什么区别

  • 51CTO:编译器与运行期

  • 编译期与运行期确定的内容:

  • 调用重载的方法是在编译器确定的:

  • JIT即时编译的原理

  • 对比JIT和AOT,各自有什么优点与缺点?

  • 理解Java的JIT和AOT

  • 什么是JIT

  • 彻底认识「JIT编译器的运行原理」

  • 即时编译(JIT)探究https://juejin.cn/post/7065515220222869518)

  • ChatGpt (手动狗头)😏

​ 模糊区域已经替大家踩了,他们之间的联系也给大家提出来了,剩下的就交给博客博友们了。

如果您遇到了这个问题,并且我的文章确确实实帮到您了,希望您给一个赞支持一下我呀,喜欢我的文章的朋友也可以关注我的博客,关注我的后续的文章分享呀,谢谢啦。在这里插入图片描述

公众号:平平无奇代码猴
也可以搜索:Jackiie_wang 公众号,欢迎大家关注!欢迎催更!留言!

作者:ProMer_Wang

链接:https://blog.csdn.net/qq_43801020/article/details/131298600

本文为ProMer_Wang的原创文章,著作权归作者所有,转载请注明原文出处,欢迎转载!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/45018.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

办公必备!不再被格式问题困扰,轻松搞定文档转换!

大家平时在工作中会需要将文档转换为其他格式吗? 日常工作中,经常碰到需要文件格式转换的情况,对于掌握了一些转换技能的朋友说,文件格式转换自然不在话下 对于不熟练的朋友来说,想要轻松转换文件格式,就…

微信dat文件用什么软件打开,如何转成jpg常用格式

微信dat文件是在PC端微信软件产生的图片文件,这个文件实际上是一个图片,微信把聊天过程中产生的图片进行了加密,更改了后缀存储为dat文件。 有时候删除了聊天记录或者被系统清理软件清理了,但还想查看曾经的微信聊天图片。这个时候…

PDF转Word怎么调整格式?这个方法轻松解决

在日常工作中,我们可能会遇到需要将PDF文件转换为Word文档的情况。虽然现在的PDF转Word工具越来越智能化,但仍然有一些格式调整需要我们手动进行。最近就有个小伙伴说接到了一份由客户提供的PDF文档,需要将其中的内容转换为Word文档&#xff…

新闻发布系统(java实现)+论文

java新闻发布系统以及论文,有需要联系QQ:1240952102 java源码以及论文 数据库脚本 以及开发工具齐全 只需安装即可使用 有需要联系QQ:1240952102

2020秋 英文科技论文写作与学术报告-期末

2020秋 英文科技论文写作与学术报告-期末 搜索答案不易,切勿白嫖

开题报告:基于java新冠疫苗在线预约系统 毕业设计论文开题报告模板

开发操作系统:windows10 4G内存 500G 开发环境:JDK1.8 Tomcat8 开发语言:Java 开发框架:springboot 模板引擎:Thymeleaf 开发工具:Idea 数据库:mysql8 数据库管理工具:nav…

大学计划《数字化转型赋能教育创新发展高峰论坛》成功举办

2023年4月8日,由航天科技控股集团股份有限公司(简称“航天科技”)主办,CFF上海与上海电子信息职业技术学院承办、智慧树网支持的《数字化转型赋能教育创新发展高峰论坛》线上会议顺利召开。此次会议邀请到了众多教育界专家、教学名…

可复现、开放科研、跨学科合作:数据驱动下的科研趋势及应用方案

信息技术的快速发展,催化了数据科学场景下科研组织提高科学研究的可复现性、实现开放科研、开展跨学科领域的交叉研究等协同诉求。本文剖析了此三类诉求的实现难点,并提供了系统化的解决方案。 欢迎进入ModelWhale 官网注册试用,个人专业版与…

教育信息化时代,如何打造中学理科信息化实验操作考场方案

近年来,我国考试招生制度不断改进完善,初步形成了相对完整的考试招生体系。但随着教育事业的逐步发展,国务院明确提出了改革考试形式和内容:完善中学学业水平考试,规范中考学生综合素质评价,加快推进中学院…

论文导读 | 社交网络上的信息传播预测

作者:北京大学苟向阳 编者按: 现代社交网络极大地促进了信息的生成和传播,也加剧了不同信息对用户注意力的竞争。 对于一条信息的传播范围进行预测,能够帮助运营者和用户提前发现潜在的热点,从而为其决策提供指导。 …

风变MTP管理课,助力职场乘风破浪

相信很多人在自己的职场规划中,最终都是奔着管理岗而去的。然而,管理人员也并不是那么容易做的,因为做了管理岗就意味着要有一定的领导力,要会管理员工,要学会把任务分发给员工,学会识人、用人等。所以对于…

基于jsp的新闻发布系统

新闻发布系统 下面就让我们来说一说基于jsp的新闻发布系统,其中使用的技术有JavaBean、fillter、数据库等,能够实现新闻的发布功能,在发布之后能够进行对每一条新闻的删除、修改、或者继续增加新的文章,最后还能够进行查询功能&am…

宋宇-课堂对话领域研究热点与 前沿趋势探究

好家伙。。。 看这种论文容易自闭,,,怎么能写这么好呢。。。 下次看看博士的论文吧还是。。 定义 课堂对话( classroom dialogue /discourse) 是师生间或者生生间围绕教育教 学目标的实现所形成的良性的交流活动。[1&#xff3d…

【论文阅读】社交网络传播最大化问题-03

Leader-aware community detection in complex networks Leader-aware community detection algorithm - 领导感知社区检测算法 创新点相关工作概念定义基础概念创新概念1. (领导力)2. (边缘紧性)3.(引力) …

用WEB OF SCIENCE助力创新性科学研究

用WEB OF SCIENCE助力创新性科学研究 Web of science是什么?web of science 怎么用?2.1 这个领域值得研究吗?-检索创建引文报告2.2若可行,那该领域进展如何?-看综述2.3 选择自己在该领域的->细分方向(或…

【论文阅读】社交网络传播最大化问题-04

Efficient Influence Maximization in Social Networks 相关工作改进的贪心算法对独立级联模型的改进对加权级联模型的改进 改进度折扣算法 影响力最大化:在社交网络中找到一小部分能够最大化传播影响力的节点(种子节点)。 一是改进原有的贪心算法,进一步…

【论文阅读】用于自动中文作文评分的多阶段预训练

摘要 这篇文章提出了一个基于预训练的中文作品评分方法。方法包含3个成分:弱监督预训练,有监督的交叉提示(cross-prompt)微调 和 有监督的目标提示(target-prompt)微调。一个文章打分器首先在一个大的文章…

【论文阅读】社交网络传播最大化问题-01

问题定义:构建传播最大化模型(最大化末态时的激活节点数量 )& 确定最具影响力节点 思考问题: 影响节点影响力的因素?有向图和无向图的模型构建区别? 定义参数: 节点影响力的取值范围节点…

谣言检测论文精读——12.2020-基于多级融合的多模态谣言检测模型

时间:2020 这篇文章解决的问题 各模态间的语义信息在特征空间是 异构的,这可能会导致以下两个问题:①多模态之间的信息融合不够充分;②模型过于依赖各模态间的信息完整度 (可能有的事件只存在文本信息,而有的事件只存在图片 信息)。 作者如何解决这个问题的 作…

2023最新新闻文章发布系统的设计与实现(毕业设计+论文+开题报告+运行)

摘 要 随着计算机技术的迅速发展,网络正以一种前所未有的冲击力影响着人类的生产和生活。网络的快速发展,颠覆了传统的信息传播方式,冲破了传统的时间,空间的局限性,继而引发了人类阅读方式的变革。现如今&#xff0…