《.NET程序员面试秘笈》----面试题15 .NET程序是如何编译的

简介: 【考点】CLR的知识,中间语言的知识。

本节书摘来自异步社区《.NET程序员面试秘笈》一书中的第1章,面试题15,作者: 张云翯, 更多章节内容可以访问云栖社区“异步社区”公众号查看。

面试题15 .NET程序是如何编译的

.NET程序员面试秘笈
【考点】CLR的知识,中间语言的知识。

【出现频率】

【解答】

.NET的程序可由多种高级语言编写,如C++、Visual Basic、 C#、 J# 等,但是最后将会被各自的编译器编译为一致的中间语言(IL)。最后由CLR提供运行环境,将中间语言编译为机器码,供CPU执行,其编译过程如图1.26所示。

为了尽量减少中间代码编译为机器代码的性能损失,中间语言采用即时编译,也被称为JIT编译。这种编译方式只编译调用的代码部分,而并非完全编译程序中所有的代码,编译过的部分将存储在内存中,下次执行时不需重复编译。当退出程序时,已编译部分的代码才会被清除。这种策略极大地降低了中间代码的性能损失,是程序灵活性和性能相权衡的较佳方案。


b9ea762a738b885a4ba0604ce8fd41ece51c27e0

【分析】

在系统中运行.NET程序必须安装相应版本的.NET Framework,目前最新版本为4.5。.NET程序不是已经编译过了么?为什么还要依赖.NET Framework呢?这和.NET程序的运行机制有关,传统上程序分为源代码层和编译后的本机代码层(机器码)。而.NET提供了对多种编程语言以及多重平台的支持,所以在其中添加了中间代码层,中间代码被称为IL或MSIL。由于多了中间语言代码,使.NET程序有了更好的灵活性,有运行于多个平台的可能性(如Linux系统)。

.NET Framework的核心是CLR,即公共语言运行时,CLR是.NET程序的运行库环境。中间语言需要在CLR中运行并转换为机器码,所以.NET程序必须依赖.NET Framework才能运行。以C# 语言为例,C# 编译器编译的程序只是由中间语言构成,无法直接运行,必须由CLR执行。

.NET这种编译运行的机制和Java、ActionScript比较相似,Java第一次编译为字节码,而Java良好的移植性得益于此。只要客户机安装了Java虚拟机(JVM),就可以直接运行Java程序(JVM将字节码编译为机器码)。类似地,ActionScript同样被第一次编译为字节码,并存放于swf文件中。只要客户机安装了FlashPlayer,swf即可运行,因为FlashPlayer含有AS虚拟机(AVM)。可见,.NET的CLR和JVM、AVM是殊途同归。

说明:

客户机应尽量安装新版本的.NET Framework。
本节问题主要考察面试者对于.NET Framework编译的认识,特别是对于中间语言的理解。.NET程序的中间语言(IL)也被称为托管代码,其优点总结如下所示:

(1)平台无关性。例如MONO项目,可以使.NET程序运行于Windows以外的平台。

(2)JIT性能优化。及时编译需要调用的代码,尽可能提高程序运行速度。

(3)语言互操作性。支持多种语言编写程序,并编译为中间语言。通过这个特性,可以使多种语言编写的程序交互操作,以提升团队合作的融洽性。

本文仅用于学习和交流目的,不代表异步社区观点。非商业转载请注明作译者、出处,并保留本文的原始链接。

相关文章
|
4天前
|
XML 开发框架 .NET
LabVIEW中加载.NET 2.0,3.0和3.5程序集
LabVIEW中加载.NET 2.0,3.0和3.5程序集
13 4
|
1天前
|
存储 缓存 前端开发
100道 IT名企前端面试真题,Web前端阿里等大厂面试题汇总
100道 IT名企前端面试真题,Web前端阿里等大厂面试题汇总
|
1天前
|
移动开发 前端开发 JavaScript
【前端面试】前端面试题300道~~熬夜吐血整理,2024年最新大厂面试经验分享稿
【前端面试】前端面试题300道~~熬夜吐血整理,2024年最新大厂面试经验分享稿
|
1天前
|
移动开发 前端开发 JavaScript
Web前端开发之面试题全解析 一(3),前端面试题背不下来怎么办
Web前端开发之面试题全解析 一(3),前端面试题背不下来怎么办
|
1天前
|
前端开发 算法 搜索推荐
Web前端开发之面试题全解析 一(1),2024年最新前端组件化面试
Web前端开发之面试题全解析 一(1),2024年最新前端组件化面试
|
1天前
|
存储 缓存 前端开发
web前端常见的面试题总结,2024年最新面试时有哪些技巧
web前端常见的面试题总结,2024年最新面试时有哪些技巧
web前端常见的面试题总结,2024年最新面试时有哪些技巧
|
1天前
|
JSON JavaScript 前端开发
web前端入门到实战:32道常见的js面试题,2024年最新秋招是直接面试吗
web前端入门到实战:32道常见的js面试题,2024年最新秋招是直接面试吗
|
1天前
|
JavaScript 前端开发 程序员
web前端入门到实战:32道常见的js面试题(1),面试哪些
web前端入门到实战:32道常见的js面试题(1),面试哪些
|
1天前
|
前端开发 JavaScript
web前端JS高阶面试题,2024我的前端大厂面试之旅
web前端JS高阶面试题,2024我的前端大厂面试之旅
|
1天前
|
JavaScript 前端开发
web前端JS高阶面试题(1),高级开发工程师面试
web前端JS高阶面试题(1),高级开发工程师面试

相关实验场景

更多