c++, java和c#的编译过程解析

c++, java和c#的编译过程解析

ID:17025088

大小:169.57 KB

页数:4页

时间:2018-08-26

c++, java和c#的编译过程解析_第1页
c++, java和c#的编译过程解析_第2页
c++, java和c#的编译过程解析_第3页
c++, java和c#的编译过程解析_第4页
资源描述:

《c++, java和c#的编译过程解析》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、C++,Java和C#的编译过程解析1.1.1摘要我们知道计算机不能直接理解高级语言,它只能理解机器语言,所以我们必须要把高级语言翻译成机器语言,这样计算机才能执行高级语言编写的程序,在接下来的博文中,我们将介绍非托管和托管语音的编译过程。1.1.2正文非托管环境的编译过程(C/C++)纯C/C++的程序通常运行在一个非托管环境中,类是由头文件(.h)和实现文件(.cpp)组成,每个类形成了一个单独的编译单元,当我们编译程序时,几个基本组件会把我们的源代码翻译成二进制代码,接下来我们通过以下图片说明非托管环境的编译过程:图1C/C++编译过程首先是预处理器,如果在项目中有头文

2、件和宏表达式,那么它将负责包含头文件和翻译所有的宏观表达式。接下来是编译器,它不是直接生成二进制代码,而是生成汇编代码(.s),这基本上是所有现代的非结构化语言的共同基础。然后,汇编程序把汇编代码翻译成目标代码(.o和.obj文件,机器指令)。最后链接器,它把所有彼此相关的目标文件和生成的可执行文件或库链接起来。总而言之,在一般情况下,我们的代码首先翻译成汇编代码,接着翻译成机器指令(二进制代码)。YibinCityCitytracktrafficplanningisYibincityregionalrangewithintracktrafficsystemofonceint

3、egration,andcitytracktrafficalsoisYibinCityCityintegratedtracktrafficsystemintheofpart,foraccurategraspcitytracktrafficresearchofobject什么是宏?在C/C++中,宏是预处理指令,它有多种应用技术:包括预定义、创建关键字和条件编译等等。在一般情况下,这些技术在C++中使用被认为是不好的做法,主要原因是有可能滥用C++提供的语法变化功能,甚至有可能在不知情情况下创建了非标准的语言,宏不遵循一般的源代码编译规则,由于它通过预处理来处理,而不是编译器。

4、托管环境的编译过程(C#/Java)在托管环境中,编译的过程略有不同,我们熟知的托管语言有C#和Java,接下来,我们将以C#和Java为例介绍在托管环境中的编译过程。当我们在喜爱的IDE中编写代码时,第一个检测我们代码的就是IDE(词法分析),然后,编译成目标文件和链接到动态/静态库或可执行文件进行再次检查(语法分析),最后一次检查是运行时检查。托管环境的共同特点是:编译器不直接编译成机器码,而是中间代码,在.NET中称为MSIL-MicrosoftIntermediateLanguage,Java是字节码(Bytecode)在那之后,在运行时JIT(JustInTime)

5、编译器将MSIL翻译成机器码,这意味着我们的代码在真正使用的时候才被解析,这允许在CLR(公共语言运行时)预编译和优化我们的代码,实现程序性能的提高,但增加了程序的启动时间,我们也可以使用Ngen(NativeImageGenerator)预编译我们的程序,从而缩短程序的启动时间,但没有运行时优化的优点。(JeffWong的补充Java是先通过编译器编译成Bytecode,然后在运行时通过解释器将Bytecode解释成机器码;C#是先通过编译器将C#代码编译成IL,然后通过CLR将IL编译成机器代码。所以严格来说Java是一种先编译后解释的语言,而C#是一门纯编译语言,且需要

6、编译两次。) 图2C#的编译过程YibinCityCitytracktrafficplanningisYibincityregionalrangewithintracktrafficsystemofonceintegration,andcitytracktrafficalsoisYibinCityCityintegratedtracktrafficsystemintheofpart,foraccurategraspcitytracktrafficresearchofobject.NetFramework就是在Win32core上添加了一个抽象层,它提供的一个好处就是支持多语言

7、、JIT优化、自动内存管理和改进安全性;另外一个完整解决方案是WinRT,但这涉及到另外一个主题了,这里不作详细介绍。图3WindowsAPIJIT编译的优点和缺点JIT编译带来了许多好处,最大的一个在我看来是性能的优势,它允许CLR(通用语言运行时扮演Assembler组件)只执行需要的代码,例如:假设我们有一个非常大的WPF应用程序,它不是立即加载整个程序,而是CLR开始执行时,我们代码的不同部分将通过一个高效的方法翻译成本地指令,因为它能够检查系统JIT和生成优化的代码,而不是按照一个预定义的模式

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。