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

C#等高级语言运行过程

C#等高级语言运行流程:

  1. 假设您编写了一个 C# 程序并将其保存在一个称为源代码的文件中。

  1. 特定于语言的编译器将源代码编译成 MSIL(Microsoft 中间语言),也称为 CIL(通用中间语言)或 IL(中间语言)及其元数据。元数据包括程序的每个功能的所有类型、实际实现。MSIL 是与机器无关的代码。

  1. 现在,CLR应运而生。CLR 为 MSIL 代码提供服务和运行时环境。在内部,CLR包括JIT(即时)编译器,它将MSIL代码转换为由CPU进一步执行的机器代码。CLR 还使用 .NET Framework 类库。元数据向 CLR 提供有关编程语言、环境、版本和类库的信息,CLR 通过该信息处理 MSIL 代码。由于 CLR 很常见,因此它允许用不同语言编写的类的实例调用用另一种语言编写的类的方法。

CLR(Common Language Runtime)是一个可由多种编程语言使用的“运行时”,是 .NET Framework 的基本虚拟机组件。它是 .NET Framework 中的运行时环境,它运行代码并通过提供各种服务帮助简化开发过程。基本上,它负责管理 .NET 程序的执行,而不管任何 .NET 编程语言。在内部,CLR 实现了 VES(虚拟执行系统),它在 Microsoft 的 CLI(公共语言基础结构)实现中定义。

公共语言规范 (CLS):

它负责将不同的 .NET 编程语言语法规则和法规转换为 CLR 可理解的格式。基本上,它提供了语言互操作性。语言互操作性意味着在 .NET 框架中也为其他编程语言提供执行支持。

语言互操作性可以通过两种方式实现:

托管代码:由 CLR 管理的 MSIL 代码称为托管代码。对于托管代码。

非托管代码:在 .NET 开发之前,like.COM Components 和 Win32 API 的编程语言不会生成 MSIL 代码。因此,这些不是由 CLR 管理,而是由操作系统管理。

IL:中间语言(中间代码)是一种面向语法,易于翻译成目标程序的源程序的等效内部表示代码,IL是基于栈的,微软提供ilasm.exe的il汇编器和一个名为ildasm.exe的il反汇编器。

通用类型系统 (CTS)

每种编程语言都有自己的数据类型系统,因此CTS负责了解.NET编程语言的所有数据类型系统,并将它们转换为CLR可理解的格式,这将是一种通用格式。

每种 .NET 编程语言都有 2 种类型的 CTS:

值类型:值类型将值直接存储到内存位置。这些类型仅适用于堆栈机制。CLR 在编译时允许这些内存。

引用类型:引用类型将包含值的内存地址,因为引用类型不会将变量值直接存储在内存中。这些类型与堆机制一起使用。CLR 在运行时为这些分配内存。

垃圾收集器:它用于提供自动内存管理功能。如果没有垃圾收集器,程序员将不得不编写内存管理代码,这对程序员来说是一种开销。

JIT(即时编译器):它负责使用公共语言运行时环境将 CIL(公共中间语言)转换为机器代码或本机代码。

Windows机制:Windows 是一个事件驱动的操作系统。事件驱动围绕着消息的产生与处

理展开,事件驱动消息会进入系统消息队列中并靠消息循环机制来处理和实现。

的通知,消息是Windows 操作系统的灵魂。

参考:

https://mp.weixin.qq.com/s?__biz=MzI0MTU0ODQwMQ==&mid=2247485894&idx=1&sn=8ee1e0d049f6c00f9523e14397e36a40&chksm=e908a4d8de7f2dcedcda1aa8f7ace43c471fca195ffcc44a97e6d60ce4b1a8c398de56857e4d&scene=27

https://www.cnblogs.com/jimcsharp/p/4369141.html

相关文章:

  • 人脸活体检测系统(Python+YOLOv5深度学习模型+清新界面)
  • 超详细的堆排序,进来看看吧。
  • HTTP 缓存的工作原理
  • STM32开发(九)STM32F103 通信 —— I2C通信编程详解
  • Leetcode 6322. 检查骑士巡视方案 暴力模拟法 第337场周赛,第二题
  • 蚂蚁一面面试经历
  • Spring事务和事务传播机制
  • ChatGPT加强版GPT-4面世,打工人的方式将被颠覆
  • oracle和mysql的区别
  • 指针进阶(上)
  • C++ 手撸简易服务器(完善版本)
  • string类(上)
  • SpringCloud五大核心组件
  • IntelliJIDEA 常用快捷键
  • 【2024考研】计算机考研,4轮复习时间安排
  • @jsonView过滤属性
  • 【跃迁之路】【519天】程序员高效学习方法论探索系列(实验阶段276-2018.07.09)...
  • iOS动画编程-View动画[ 1 ] 基础View动画
  • javascript从右向左截取指定位数字符的3种方法
  • mysql innodb 索引使用指南
  • PAT A1017 优先队列
  • Python学习之路13-记分
  • Rancher如何对接Ceph-RBD块存储
  • ReactNativeweexDeviceOne对比
  • 产品三维模型在线预览
  • 基于Mobx的多页面小程序的全局共享状态管理实践
  • 将 Measurements 和 Units 应用到物理学
  • 如何合理的规划jvm性能调优
  • 我的业余项目总结
  • 用 vue 组件自定义 v-model, 实现一个 Tab 组件。
  • ​【原创】基于SSM的酒店预约管理系统(酒店管理系统毕业设计)
  • ​secrets --- 生成管理密码的安全随机数​
  • ​力扣解法汇总1802. 有界数组中指定下标处的最大值
  • #laravel 通过手动安装依赖PHPExcel#
  • #QT(一种朴素的计算器实现方法)
  • (10)ATF MMU转换表
  • (2)STM32单片机上位机
  • (Bean工厂的后处理器入门)学习Spring的第七天
  • (bean配置类的注解开发)学习Spring的第十三天
  • (C语言)输入自定义个数的整数,打印出最大值和最小值
  • (ZT) 理解系统底层的概念是多么重要(by趋势科技邹飞)
  • (官网安装) 基于CentOS 7安装MangoDB和MangoDB Shell
  • (一)Java算法:二分查找
  • (转)linux 命令大全
  • .NET CORE使用Redis分布式锁续命(续期)问题
  • .NET/C# 如何获取当前进程的 CPU 和内存占用?如何获取全局 CPU 和内存占用?
  • .NET关于 跳过SSL中遇到的问题
  • /3GB和/USERVA开关
  • /deep/和 >>>以及 ::v-deep 三者的区别
  • /run/containerd/containerd.sock connect: connection refused
  • [ IO.File ] FileSystemWatcher
  • []FET-430SIM508 研究日志 11.3.31
  • [2016.7 Day.4] T1 游戏 [正解:二分图 偏解:奇葩贪心+模拟?(不知如何称呼不过居然比std还快)]
  • [Android Studio 权威教程]断点调试和高级调试
  • [BIZ] - 1.金融交易系统特点