关于C#的编译与执行

每一种编程语言,要想执行,就必须要转换为目标操作系统能够理解的语言才能执行,这种语言叫做本机代码(native code)。C#也是一样的,也要做这样的转换,但是它不是一处到位的,在.NET Framework这个平台下,该过程分为两个阶段。

(1)C#代码编译为中间语言代码的阶段-----在编译C#代码时,并不是立即创建了本地代码,而是通过C#编译器(这个编译器集成在Visual Studio里面)把代码编译为通用中间语言(Common Intermediate Language,CIL)代码,也就是IL代码,并将其存储在一个程序集中。程序集中除了有IL代码外,还将包括元数据和可选的资源文件:元数据是用来描述代码中的类型,这种描述针对3个方面:类型定义的描述、类型成员的描述和类型引用成员的描述;可选的资源文件指的是IL代码中使用的其他数据,如图片文件等。(PS:在C#中,程序集分为两种,扩展名为.exe的可执行文件和扩展名为.dll的可供其他程序调用的库文件。)

(2)中间语言代码(IL代码)转换为本地代码的阶段-----要使代码能够在目标操作系统上运行,还需要进一步把CIL代码转换为特定CPU的本机代码,该过程是由即时编译器(Just-In-Time,JIT)来完成的。

最后就是执行本机代码了,JIT编译生成本机代码之后,编译好的本机代码会被存储在一个缓冲区中缓存,下次调用相同的程序集时,可直接从缓冲区中获取本机代码,从而避免了二次验证和编译。这样的使用方式,系统只在首次调用时才会造成一些性能损失(JIT编译过程),所以C#程序在第一次调用的时候,会明显感觉慢一些。下面这张图是我在网上找的,很浅白的说明了代码的执行过程。

时间: 2024-10-11 02:10:31

关于C#的编译与执行的相关文章

编译型和解释型的区别&&Java从编译到执行的过程

借鉴: 1  http://www.cnblogs.com/bluestorm/archive/2012/12/09/2810167.html           区别 2  http://blog.jobbole.com/53152/       编译的过程 3  http://jingyan.baidu.com/article/b24f6c82de6bcf86bfe5dad4.html          Java从编译到执行的过程(完整) Java编译-下载-解释-执行的过程: 在Java编

Java代码编译和执行的整个过程

Java代码编译是由Java源码编译器来完成,流程图如下所示: Java字节码的执行是由JVM执行引擎来完成,流程图如下所示: Java代码编译和执行的整个过程包含了以下三个重要的机制: Java源码编译机制 类加载机制 类执行机制 Java源码编译机制 Java 源码编译由以下三个过程组成: 分析和输入到符号表 注解处理 语义分析和生成class文件 流程图如下所示: 最后生成的class文件由以下部分组成: 结构信息.包括class文件格式版本号及各部分的数量与大小的信息 元数据.对应于Ja

JAVA编译和执行过程

Java代码编译是由Java源码编译器来完成,流程图如下所示: Java字节码的执行是由JVM执行引擎来完成,流程图如下所示: Java代码编译和执行的整个过程包含了以下三个重要的机制: Java源码编译机制 类加载机制 类执行机制 Java源码编译机制 Java 源码编译由以下三个过程组成: 分析和输入到符号表 注解处理 语义分析和生成class文件 流程图如下所示: 最后生成的class文件由以下部分组成: 结构信息.包括class文件格式版本号及各部分的数量与大小的信息 元数据.对应于Ja

C语言是怎么编译到执行Hello world的。

1.首先在编译器上写出你的Hello world程序,比如我在linux平台用GCC编译器进行编译,此时程序名称应该是以.c为后缀的文件名. 2.编译第一步,启动cpp预处理器,进行预处理操作,展开头文件替换,加载头文件等等.编译完成之后生成一个.i为后缀的文件 此时使用命令:gcc -E hello.c -o hello.i 如果有兴趣可以打开hello.i文件查看里面的内容. 3.第三步,该启动gcc/cc编译器了,该编译器可将预处理后后的.i文件编译成平台汇编,根据平台的差异编译成不同的汇

Android源码和内核源码的下载,编译和执行

笔者依据罗升阳老师的<Android 系统源码情景分析>一书,尝试下载,编译和执行Android源码和内核源码.但可能是软件源"被墙"或版本号更新的原因.期间遇到诸多问题.笔者求助于强大的度娘和谷歌.最终编译成功,现将改动的步骤记录例如以下: 一.下载相关的工具包和依赖包 1.git工具的下载.不多说 2.Java SDK的下载(參考网址:http://blog.csdn.net/zjclugger/article/details/11762085) 此处建议下载jdk1.

C语言文件的编译到执行的四个阶段

C语言文件的编译与执行的四个阶段并分别描述 C语言的编译链接过程要把我们编写的一个c程序(源代码)转换成可以在硬件上运行的程序(可执行代码),需要进行编译和链接.编译就是把文本形式源代码翻译为机器语言形式的目标文件的过程.链接是把目标文件.操作系统的启动代码和用到的库文件进行组织形成最终生成可执行代码的过程. 第一个阶段: 是预处理阶段,在正式的编译阶段之前进行.预处理阶段将根据已放置在文件中的预处理指令来修改源文件的内容.如#include指令就是一个预处理指令,它把头文件的内容添加到.cpp

Java源程序的编译及执行问题

在写Java程序时,遇到了编译不通过的问题: 错误提示显示GBK,可能是字符集的问题导致的: 为java命令指定了一个选项 -encoding utf-8,才编译成功^_^ 不过在使用javac命令执行时,又遇到了问题,导致执行失败: package lee; /**  *Description:  *<br>网站:<a href="http://www.123.org">123</a>  *<br>Copyright (C), 2001

【Java编程】Java在dos窗口编译与执行的批处理

最近在Java编程过程中,常用到dos窗口对程序进行编译与运行.但是不方便之处在于每次都要输入命令进入将要编译的程序的目录(其实也有简单的方法,在文章末尾给出).于是编写了一个配置文件,可以一次修改,经常使用.(只需要在下面程序中将路径修改为你所经常存放程序的目录).前提当然是你已正确配置环境变量.具体方法为:将下面的程序放在新建的文本文件中,并将后缀名改为.bat.然后双击该文件,按提示操作即可!程序源码如下:(红色字体是需要根据你的存放路径修改的) echo off cls title Ja

C#程序的编译和执行

1.在讲解 C# 程序的编译与执行之前,首先了解以下两个概念,以便充分理解C# 程序的运行. CLI--Common Language Infrastructure 的简称,C# 程序在Microsoft .NET Framework 上运行时, 它是 Windows 的一个必要组件,包括一个称为公共语言运行库(CLR,在第1章中对该内容有过详细讲解)的虚拟执行系统和一组统一的类库. IL--Intermediate Language 的简称,称为中间语言,又称为 MSIL.所有Microsof

在命令符模式下编译并执行Java程序

对于Java初学者,建议使用纯文本文件来编写Java程序,并在命令符模式下使用工具程序编译和执行Java程序.使用javac工具编译.java,使用java工具执行.class.(推荐sublime编辑器) 怎么在命令符模式下编译并执行Java程序?弄了好久查了不少资料终于解决.记录下来,便于总结.分享.查阅. 首先根据自己计算机的操作系统下载和安装sun公司的JDK,http://www.oracle.com/technetwork/cn/java /javase/downloads/inde