C#语言编译:并与C/C++对比

C#语言在.NET中,编译分为两个阶段

(1) 将源代码编译为Microsoft中间语言(CIL)

(2) CLI把CIL编译为平台专用的代码。

不仅是编译问题:程序执行问题

  • C#程序还需要在一个代理(托管)的上下文中执行。
  • 负责管理C#程序执行的代理就是:虚拟执行系统(Virtual Execution System,VES
  • 更通俗称呼为:“运行时”。

运行时:负责加载和运行程序,并在程序执行时提供额外的服务。

如下图:是C#编译执行情况。



C#与C/C++对比

C/C++程序编译过程与运行过程icon-default.png?t=M4ADhttps://blog.csdn.net/xiaoyaolangwj/article/details/123898733

C和C++的编译如上文。

  • 由于C和C++之类的语言会直接编译成机器码,所以这些语言的平台是底层操作系统机器指令集,即Microsoft Windows、Linux和MacOS等。
  • 但是C#不同,C#的底层上下文是“运行时”或说VES

C#编译需要两个步骤。

1.C#编译器将C#转换为CIL(公共中间语言(Common Intermediate Language))
2.将CIL转换为处理器能执行的指令

运行时”能理解CIL语句,并能将它们编译为机器码
通常要由“运行时”内部的一个组件执行从CIL到机器码的编译。该组件称为即时(just-in-time,JIT)编译器
程序安装或执行时,便可能发生JIT编译,或者说即时编译 (jitting)


运行时Running-Time

即使“运行时”将CIL代码转换为机器码并开始执行,也在继续管理代码的执行。在“运行时”这样的一个代理上下文中执行的代码称为托管代码,在“运行时”控制下的执行过程称为托管执行。对执行的控制转向数据,数据就成为了托管数据 ,因为数据所需的内存由“运行时”自动分配和回收的


平台可移植性

代码的移植工作必须由“运行时”的实现来完成,而不是由应用程序的开发者来完成(感谢.NET Standard)。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值